如何使用Oracle REGEXP替换位于模式之间的单词,而不替换该模式之外的同一单词?

问题描述 投票:0回答:1

我正在尝试将模式<a hrefa>之间的“ group”替换为“ group1”。下面的查询在所需模式之外替换“组”。如何替换模式之间的单词?

with t as (
    select '<a href Part of the technical Network Group www.tech.com/sites/ hh a> group' as text from dual
    union all select '<a href mean www.tech.technical Network a>' as text from dual
    union all select 'www.tech.tech///technical <a href Network Group a>' as text from dual)
select regexp_replace(text,'group','group1',1,0,'i')
from t
WHERE REGEXP_LIKE(text,'<a href.*group.*a>','i') 

sql oracle pattern-matching regexp-replace regexp-like
1个回答
0
投票

这是一种似乎可行的方法,至少可以使用您的确切样本数据(但请参见以下注意事项):

SELECT REGEXP_REPLACE(text, '^(.*<a[^>]+) Group (a>.*)$', '\1\2', 1, 0, 'i')
FROM t;

enter image description here

Demo

这里的主要警告是,使用regex解析HTML内容通常是一个坏主意,因为HTML / XML内容可以任意嵌套,并且不是常规文本。我没有费心测试我的答案以涵盖在给定列值中可能出现多个锚标签的情况,也没有考虑其他HTML标签可能嵌套在锚标签旁边的可能性,反之亦然。如果此答案不能解决您遇到的所有情况,那么您可能需要考虑将Oracle的HTML内容导出到更适合此类工作的工具中,例如Java或C#。

© www.soinside.com 2019 - 2024. All rights reserved.