我正在尝试在oracle中创建一个RegExp,以匹配具有以下条件的字符串,
长度为11个字符 除了(S,L,O,I,B和Z)之外,2,5,8,9个字符是字母[A-Z] 1,4,7,10,11个字符是数字[0-9] 第3和第6将是数字或字母。
答案 0 :(得分:2)
您希望将以下正则表达式与REGEXP_LIKE()
,REGEXP_SUBSTR()
等一起使用:
^[0-9][AC-HJKMNP-RT-Y][A-Z0-9][0-9][AC-HJKMNP-RT-Y][A-Z0-9][0-9][AC-HJKMNP-RT-Y]{2}[0-9]{2}$
希望这有帮助。
答案 1 :(得分:1)
制作精美的角色列表
我只是制作一个花哨的字符列表,不包括您引用的字母大写字母。这类似于David Faber的回答。
这是我喜欢的角色列表:
- '[AC-HJKMNPQRT-Y]
' - Oracle的文档说明连字符的特殊之处在于它在此字符列表中形成一个范围。
为了使这个模式简洁,我注意到在大多数情况下,这个字符串遵循数字,字母,字母模式的模式。因此,我将其置于子表达式分组中,该分组发生2次(量词跟随)。
SCOTT@db>WITH smple AS (
2 SELECT
3 '123456789ab' tst
4 FROM
5 dual
6 UNION ALL
7 SELECT
8 '1CC4DD7EE01'
9 FROM
10 dual
11 UNION ALL
12 SELECT
13 '1CB4DD7EE01'
14 FROM
15 dual
16 UNION ALL
17 SELECT
18 '1C44D67EE01'
19 FROM
20 dual
21 ) SELECT
22 smple.tst,
23 regexp_substr(smple.tst,'^(\d[AC-HJKMNPQRT-Y](\d|[AC-HJKMNPQRT-Y])){2}\d[AC-HJKMNPQRT-Y]{2}\d{2}$') matching
24 FROM
25 smple;
TST MATCHING
-------------------------
123456789ab
1CC4DD7EE01 1CC4DD7EE01
1CB4DD7EE01
1C44D67EE01 1C44D67EE01