不幸的是\b
正则表达式字符在Oracle中不起作用。 b Oracle中的正则表达式字符11g
作为一种变通方法,我发现下面的表达式:
(^|\s|\W)(100100|100101|100102|100103)($|\s|\W)
(参见:The missing \b regular expression special character in Oracle.),但在测试字符串数据:
Test string 100100/100101, ABC-DEF, 100102 100103 test data abc100100 100100abc.
值100101
和100103
不匹配,而我期待他们被匹配,就像\b
表达式那样。
有什么办法可以让它工作吗?我正在使用Oracle 11g。
我将不胜感激的任何帮助。
编辑:
我的目标是标记所有比赛。那我期待的输出是:
Test string [ddd]100100[/ddd]/[ddd]100101[/ddd], ABC-DEF, [ddd]100102[/ddd] [ddd]100103[/ddd] test data abc100100 100100abc.
在为此我使用下面的语句:
regexp_replace(p_text,'(^|\s|\W)(' || l_ids || ')($|\s|\W)', '\1[ddd]\2[/ddd]\3');
其中:
l_ids
- 由|
,ID可分隔的编号列表包含数字,字母,下划线和破折号p_text
- 输入文字
编辑2:
在上述试验中字符串值100100
不应在字abc100100
以及100100abc
匹配。
你想输出不同行上的匹配吗? –
第二个'(^ | \ s | \ W)'应该是'($ | \ s | \ W)'。此外'\ s'已经包含在'\ W'中。请注意,第一个数字后面的'/'被第一个模式所消耗,因此不能用于第二个匹配,这在没有预览的情况下很难解决。 –
@vkp请在问题中查看我的编辑。 – kpater87