\b Oracle 11g 中的正则表达式字符

\b regular expression character in Oracle 11g

不幸的是\b 正则表达式字符在 Oracle 中不起作用。

作为解决方法,我发现了以下表达式:

(^|\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.

100101100103 不匹配,而我希望它们像 \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)', '[ddd][/ddd]');

其中:

编辑 2:

在上面的测试字符串中,值 100100 不应与单词 abc100100 以及 100100abc.

匹配

假设-

  • chr(1)没有出现在文中
  • 任何不在 [a-zA-Z0-9] 中的字符都被视为分隔符(例如 /

with t (p_text) as (select 'Test string 100100/100101, ABC-DEF,  100102 100103 test data abc100100 100100abc.' from dual)

select  replace
        (
            regexp_replace
            (
                regexp_replace
                (
                    p_text
                   ,'([a-zA-Z0-9]+)'
                   ,chr(1) || '' || chr(1)
                )
               ,chr(1) || '(100100|100101|100102|100103)' || chr(1)
               ,'[ddd][/ddd]'
            )
           ,chr(1)
        ) 

from    t

Test string [ddd]100100[/ddd]/[ddd]100101[/ddd], ABC-DEF, [ddd]100102[/ddd] [ddd]100103[/ddd] test data abc100100 100100abc.