REGEXP_REPLACE 对于精确的正则表达式模式,不起作用
REGEXP_REPLACE for exact regex pattern, not working
我正在尝试匹配一个确切的模式,以便使用以下代码为 ISSN 做一些数据清理:
select case when REGEXP_REPLACE('1234-5678 ÿþT(zlsd?k+j''fh{l}x[a]j).,~!@#$%^&*()_+{}|:<>?`"\;''/-', '([0-9]{4}[\-]?[Xx0-9]{4})(.*)', '') not similar to '[0-9]{4}[\-]?[Xx0-9]{4}' then 'NOT' else 'YES' end
我想要的模式匹配任何 8 位数字组,中间可能有破折号,最后可能有 X。
上面的代码适用于大多数情况,但如果捕获组 1 是以下示例:123456789
那么它也会 returns 正数,因为它匹配前 8 位数字,而我不想要它。
我尝试用 ^...$
包围捕获组 1,但这也不起作用。
所以我想将这些示例和类似示例完全匹配:
1234-5678
1234-567X
12345678
1234567X
但不是这些(和类似的):
1234567899
1234567899x
我错过了什么?
您可以使用
^([0-9]{4}-?[Xx0-9]{4})([^0-9].*)?$
详情
^
- 字符串开头
([0-9]{4}-?[Xx0-9]{4})
- 捕获组 1 (</code>):四个数字,一个可选的 <code>-
,然后是四个 x
/ X
或数字
([^0-9].*)?
- 可选的捕获组 2:除数字以外的任何字符,然后尽可能多的任何 0+ 个字符
$
- 字符串结尾。
我正在尝试匹配一个确切的模式,以便使用以下代码为 ISSN 做一些数据清理:
select case when REGEXP_REPLACE('1234-5678 ÿþT(zlsd?k+j''fh{l}x[a]j).,~!@#$%^&*()_+{}|:<>?`"\;''/-', '([0-9]{4}[\-]?[Xx0-9]{4})(.*)', '') not similar to '[0-9]{4}[\-]?[Xx0-9]{4}' then 'NOT' else 'YES' end
我想要的模式匹配任何 8 位数字组,中间可能有破折号,最后可能有 X。
上面的代码适用于大多数情况,但如果捕获组 1 是以下示例:123456789
那么它也会 returns 正数,因为它匹配前 8 位数字,而我不想要它。
我尝试用 ^...$
包围捕获组 1,但这也不起作用。
所以我想将这些示例和类似示例完全匹配:
1234-5678
1234-567X
12345678
1234567X
但不是这些(和类似的):
1234567899
1234567899x
我错过了什么?
您可以使用
^([0-9]{4}-?[Xx0-9]{4})([^0-9].*)?$
详情
^
- 字符串开头([0-9]{4}-?[Xx0-9]{4})
- 捕获组 1 (</code>):四个数字,一个可选的 <code>-
,然后是四个x
/X
或数字([^0-9].*)?
- 可选的捕获组 2:除数字以外的任何字符,然后尽可能多的任何 0+ 个字符$
- 字符串结尾。