【发布时间】:2021-01-07 08:17:57
【问题描述】:
我最初只想匹配第一个实例,但很快意识到这是不可能的。我使用的工具只使用 RegEx,所以我也没有选择。
基本上,我得到了一个带有 HTML 标签的文本,我想匹配第一段的标签而不匹配以下标签。 比如出这个:
<p>erkfoijwdocndoufhwroguh</p><p>pijgoijkuohuhogiougwtg</p><p>pijgoijkuohuhogiougwtg</p><p>pijgoijkuohuhogiougwtg</p>
我要匹配第一个<p></p>
没有别的了。
所以我想我可以使用负前瞻来排除旁边有标签的标签。如:
(?!>)(<|<\/)p>
但由于某种原因,这仍然匹配每个<p> 和</p> 标签,而不是忽略那些前面有另一个标签的标签。有什么建议吗?
编辑添加:我只需要匹配标签,而不是标签内的文本。并且lookbehind不适用于我正在使用的工具。似乎所有工作 here 的东西也适用于我的工具。
第二次编辑:我解决了我的问题,但我没有解决这个问题,因为解决方案不是答案,这似乎是一个有趣的问题,我将来可能会遇到类似的问题。基本上,如果有人知道我如何引用前面没有> 但还包括第一个</p> 的<p>,我想听听。
【问题讨论】:
-
(?s)(?<=^<p>).*?(?=</p>)可能会。 -
你需要使用lookbehind而不是lookahead
-
正则表达式默认从左到右查找匹配。因此,您可以使用
.*?
并进行第一场比赛或使用 Match 选项而不是比赛(如果您使用的是 .net 风格) -
(?s) 到底应该做什么?而且似乎我正在使用的工具无法识别后视,而只能识别前瞻。我也只需要匹配标签。不是里面的文字。