2014-04-02 39 views
0

在Oracle 11g中,我需要检查进行检查,以查看是否存在以下格式为真(通过正则表达式即):检查在Oracle 11g中一个特定的字符串格式

PaaaaE0% 
PaaaaD2% 

其中该值被的以下格式:

P (followed by any 4 alphanumeric digits) E or D (followed by atleast 1 numeric digit) 

作为4个字母数字数字的一部分,如果为alpha,那么它们需要是大写。

有关如何使用正则表达式检查此格式的任何帮助将非常有用。

现在,我已经试过类似:

REGEXP_LIKE('PWOOOE12s3','[P][:alnum:]{4}[ED][:digit:]{1}') 

感谢。

+0

请查看更新后的问题,但不能确定是否正确,并不能确定如何确保大写。 – tonyf

回答

1

你八九不离十:

  • 匹配包机类应写为[[:digit:]]。注意匹配列表的外括号。
  • {n}完全匹配n发生,使用+匹配一个或多个发生。
  • [:upper:]匹配大写字母,匹配列表[[:upper:]|[:digit:]]匹配任何大写字母或数字。
  • 我还添加了^锚只匹配从字符串的开头。如果它不符合你的目的,你可以把它排除在外。

这应该完成这项工作:

[email protected]> !cat so40.sql 
with 
data_ as (
    select 1 id, 'PWOOOE12s3' str from dual union 
    select 2 id, 'PwoooE12s3' str from dual 
) 
select id, str from data_ 
where regexp_like(str, '^P[[:upper:]|[:digit:]]{4}[ED][[:digit:]]+') 
; 
[email protected]> @so40 

     ID STR 
---------- ---------- 
     1 PWOOOE12s3 

[email protected]> 
+0

是的,我注意到我错过了。现在更新。 – user272735

+0

工作过。 – tonyf