在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 :(得分: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>