我正尝试使用以下正则表达式捕获在打开和关闭li标签之间可能发生的所有事情:
/<li[\w\s\!\@\#\$\%\^\&\*\-\_\+\=\~\`\.\,\:\;\"\/\–\?\{\}\[\]\(\)\<\>\ \|\'\\]+<\/li>/g
I have created the regex here on regex 101.
我不明白为什么它没有抓住单个li元素而不是第一个li和最后一个li之间的所有文本。我对正则表达式的结构不是很熟悉,所以我不确定我需要研究什么以捕获可能显示并仍然终止</li>
标记上的各个匹配项的所有属性,特殊字符等。
更新: New Regex101 demo that better reflects the examples I'm trying to capture(即使我原来的正则表达式也无法通过其中的某些测试)
答案 0 :(得分:1)
只需将+
更改为+?
,以使其变得“懒惰”,以匹配尽可能少的字符
<li[\w\s\!\@\#\$\%\^\&\*\-\_\+\=\~\`\.\,\:\;\"\/\–\?\{\}\[\]\(\)\<\>\ \|\'\\]+?<\/li>
added this ^
演示:https://regex101.com/r/OTcwF6/3
此外,您可能希望将这些内容放在<li([...]+?)<\/li>
组的html标记之间,以便使这些内容与标记本身分开。我不知道您的用例是什么,但这似乎是您需要的。
编辑,确定了。 .
可以匹配任何字符,因此.*?
的意思是“尽可能少匹配任何字符,或者完全不匹配”。这更简单了,似乎可以满足复杂示例所需的一切
<li.*?>(.+?)<\/li>
答案 1 :(得分:1)
答案 2 :(得分:0)