\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.
值 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)', '[ddd][/ddd]');
其中:
l_ids
- 由 |
分隔的 id 列表,id 可以包含数字、字母、下划线和破折号
p_text
- 输入文字
编辑 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.
不幸的是\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.
值 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)', '[ddd][/ddd]');
其中:
l_ids
- 由|
分隔的 id 列表,id 可以包含数字、字母、下划线和破折号p_text
- 输入文字
编辑 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.