我需要帮助创建此正则表达式来替换文本
这是示例输入:
<variable class="loves">[loves] My dog loves dog food </variable>
这是我期望的示例输出:
<variable class="loves">[loves] My dog hates dog food </variable>
谢谢你
我当前使用的正则表达式突出显示方括号内以及方括号外的“loves”一词。我想忽略方括号里写的爱这个词
(?<=variable.*>.*)loves(?=.*<\/variable)
一个最通用的解决方案,而不是一个快速修复,看起来像这样
(?<=<variable.*>.*)loves(?!(?<=\[[^][]*)[^][]*])(?=.*</variable)
仅当
(?!(?<=\[[^][]*)[^][]*])
子字符串不出现在方括号之间且中间没有其他方括号时,放置在 loves
之后的 loves
负向先行才会匹配。
参见 这个正则表达式演示
请注意,多个
.*
部分将使正则表达式搜索速度变慢,并且 loves
部分即使在较长的单词(如 gloves
)内也会匹配。要解决第一个问题,请使用否定字符类,要解决第二个问题,请使用单词边界:
(?<=<variable[^>]*>[^>]*)\bloves\b(?!(?<=\[[^][]*)[^][]*])(?=[^<]*</variable)
请参阅 此正则表达式演示。
如果
[^>]*
标签内有其他标签,则 [^<]*
和 variable
模式将不起作用,因此您必须依赖 .*
或像 (?:(?!</?variable\b).)*
这样的调和贪婪标记。