我是正则表达式的新手,非常感谢任何帮助。
我尝试过以下模式和其他一些模式,例如(^[W]{1}\d{5}){1,4}')
,但没有一个能正常工作:
Select 'X' from dual Where REGEXP_LIKE ('W12342','(^[W]{1}\d{5})(?<!,)$')
答案 0 :(得分:2)
那么在这种情况下,你可以这样做:
(W[^,]{5},){3}W[^,]{5}
答案 1 :(得分:2)
我的理解是OP说如果字符串以逗号开头或结尾,匹配应该失败,而不仅仅是前面或后面的逗号不匹配,所以需要锚点。此外,基于他尝试的正则表达式,我推断单个组(例如W00000
)应匹配。所以,如果 W 后面的字符必须始终为数字,我认为正则表达式应该是这样的:
^W[:digit:]{5}(,W[:digit:]{5}){0,3}$
或者,如果它们可以是数字以外的东西:
^W[^,]{5}(,W[^,]{5}){0,3}$
<强>更新强>
OP发布了以下评论:
我在Oracle 11g上,[:digit:]不起作用。当我用[0-9]替换它时,它可以正常工作。
根据the documentation,Oracle 11g符合POSIX正则表达式标准,而应能够使用POSIX字符类,例如 [:digit:] 。但是,我在文档中注意到Oracle 11g确实支持Perl样式的反斜杠字符类缩写,当我最初编写这个答案时,我认为并非如此。在这种情况下,以下应该有效:
^W\d{5}(,W\d{5}){0,3}$
答案 2 :(得分:0)
如果我理解正确,应该这样做!
^W[0-9]{5}(,W[0-9]{5}){0,3}$
一个W12345
模式,可能后跟一到三个,W12345
块。
Edit1:如果有逗号,则添加^ $失败 Edit2:修复类,因为它在Oracle 11g上失败