我正在寻找一个更好的答案来解决一个非常类似的问题到“负面前瞻/后瞻的Oracle正则表达替换”
我的问题是在关键字后面找到正好8位的数字。
Must Match: REF12345678 REF:12345678 REF any text or short 23 num 12345678
But do NOT match: REF 123456789 REF anything 123456789
'(REF)(.*?)(\d{8})(\W|$)'; # matches 9 digits: REF 123456789 '(REF)(.*?)\D(\d{8})(\W|$)'; # won't match REF12345678
\ D被建议作为现有帖子中的解决方案,作为避免的方式。*?匹配9的第1位数字,但如果没有非数字,则无效。 (在REF12345678中,已使用REF中的F。)
'(REF)(.*?)(?<!\d)(\d{8})(\W|$)'
在Perl中运行得非常好,而不是Oracle,它不支持负面的后视。
如何在数字之前出现非数字,或者。*没有以数字结尾?如何进行零宽度断言? (使用\ D?将无效。)
有什么建议吗?
答案 0 :(得分:0)
I think this is what you're looking for:
(REF)(.*?\D)?(\d{8})(\W|$)
This says, if there are any characters between REF
and the eight digits, the last one must be a non-digit.