我需要做一个正则表达式替换,我拿一个字符串并在它周围包裹一个超链接(但这里是捕获),只要它还没有被超链接包围。我该怎么做?
所以,例如,让我们来看看文字:
The quick brown fox.
我想把“快速褐色”链接起来,就像这样:
The <a href="http://www.stackoverflow.com/">quick brown</a> fox.
但如果我找到了文字:
The <a href="http://www.stackoverflow.com/">quick brown</a> fox.
我想确定我没有在另一个超链接中包装“quick brown”。
我该怎么做?
答案 0 :(得分:1)
Lookarounds可以让你到达某个地方。虽然不完美,但这里有一个快速的正则表达式检查,看看你的文本是否已经用锚标签包装。
(?<=>)quick brown(?=</a>)
注意:lookbehind断言需要固定长度(至少在PCRE中)。
答案 1 :(得分:1)
如果要包裹链接的字符串为YOUR_STRING
,请首先标识YOUR_STRING
被链接标记包围的所有位置。
regex = <a[^>]*>[^<]*(YOUR_STRING)[^<]*</a>
以<a
后跟一个长度为零或更长的序列,不包含>
。
后跟>
后跟一个长度为零或更长的序列,不包含<
。
后跟YOUR_STRING
这是一个捕获组。
后跟一个长度为零或更长的序列,不包含<
。
后跟</a>
现在,您可以识别捕获的组YOUR_STRING
被链接标记包围的位置的字符偏移量。
除了这些地方之外,在字面上出现YOUR_STRING
的所有其他地方,请将链接标记包裹在其周围。
加分点:请注意,当您将文本插入字符串时,您可以更改字符偏移量,或者您的正则表达式可能会抛出ConcurrentModificationException /不允许您在分析时插入文本(取决于你正在使用什么图书馆。处理此问题的最佳方法是创建一个单独的StringBuffer,并在分析原始字符串时将文本附加到其中。
另请注意:识别超链接标记的正则表达式可以更智能地编写(对于正确的html),但这也适用于糟糕的html。例如。缺少href属性,例如<a>quick brown fox</a>
。如果您期望的HTML可能不完美,并且您想要处理这些问题,那么您应该相应地修改正则表达式。
希望它有效。
答案 2 :(得分:1)
不是查看关键字,而是在网址上进行简单匹配可能更容易,如果在“原始”html中找不到网址,则只能替换关键字
答案 3 :(得分:0)
好像你正在解析渲染的html,如果是这样的话,为什么不解析原始的html?然后问题变得微不足道