这很难一步到位.编写单个正则表达式实际上是不可能的.
尝试两步法.
无论是否已存在其他链接,请在每个"巴黎"周围添加链接.
找到所有错误嵌套的链接(Paris
),并消除内部链接.
第一步的正则表达式很简单:
\bParis\b
第二步的正则表达式稍微复杂一些:
(]+>.*?(?!:))]+>(Paris)
在整个字符串中使用该字符串并将其替换为匹配组1和2的内容,从而有效地删除多余的内部链接.
用简单的词解释正则表达式#2:
查找每个链接(]+>
),可选地后跟任何本身不是后跟关闭链接(.*?(?!:)
)的内容.将其保存到匹配组1中.
现在寻找下一个链接(]+>
).确保它在那里,但不要保存它.
现在寻找巴黎这个词.将其保存到匹配组2中.
寻找关闭链接().确保它在那里,但不要保存它.
用第1组和第2组的内容替换所有内容,从而丢失您未保存的所有内容.
该方法假设这些方面条件:
您输入的HTML不会被严重破坏.
你的正则表达式支持非贪婪量词(.*?)和零宽度负前瞻断言((?!:...)
).
您只在步骤1中的链接中包含单词"Paris",不包含其他字符.每个" Paris
"变为" Paris
",否则第二步将失败(直到您更改第二个正则表达式).
BTW:正则表达式#2明确允许这样的结构:
in the capital of France, Paris
剩余链接来自第一步,第二步的替换结果将是: