在Oracle 11g中检查特定的字符串格式

时间:2014-04-02 04:13:35

标签: regex plsql oracle11g

在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}')

1 个答案:

答案 0 :(得分:1)

你非常接近:

  • 匹配章程类应写为[[:digit:]]。请注意匹配列表的外括号。
  • {n}完全匹配n次出现,使用+来匹配一个或多个出现。
  • [:upper:]匹配大写字母,匹配列表[[:upper:]|[:digit:]]匹配任何大写字母或数字。
  • 我还添加了^锚点,仅匹配字符串的开头。如果它不符合您的目的,您可以将其遗漏。

这应该完成工作:

SQL@xe> !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:]]+')
;
SQL@xe> @so40

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

SQL@xe>