我正试图匹配<sup>标记中任何括号内的项目。
我的正则表达式太贪婪了,从第一个<sup>标记开始,最后一个</sup>标记结束。
/<sup\b[^>]*>(.*?)\[(.*?)\](.*?)<\/sup>/示例html:
<sup>[this should be gone]</sup>
<sup>but this should stay</sup>
<sup>this should [ also stay</sup>
[and this as well]
<sup><a href="#">[but this should definitely go]</a></sup>知道为什么吗?
谢谢!
编辑:我想这些答案是有道理的。我已经解析了很多没有regex的HTML;我只是认为这个特定的示例将与regex一起工作,因为它将执行以下操作:
<sup>标记</sup>的第一个实例发布于 2011-01-04 22:32:55
你真的不能这么做。用正则表达式解析HTMl是不可能的,因为正则表达式只能匹配正则语言;这些语言是我们实际使用的语言的一个更简单的子集。一种非常常见的非正则语言是平衡括号的Dyck语言;不可能将嵌套的括号与正则表达式正确匹配。如果你想一想,HTML和这个是一样的,用标签代替括号。因此,匹配(a)正确嵌套的sup标记是不可能的,(b)匹配平衡大括号是不可能的。我自己不使用PHP,但我知道它可以访问HTML;我建议使用它。然后,对每个sup标记进行过滤,并检查每个标记的内部文本。如果只想捕获内部文本仅为[...]的标记,其中...不包含方括号,则可以使用^\[[^\]]+\]$作为正则表达式;如果需要真正的嵌套,则需要进行更复杂的检查。
发布于 2011-01-04 22:32:18
如果您的要求是明确删除"<sup>[“和"]</sup>”中的任何文本,那么您就可以了。但是,在上一个示例中,您也希望说明嵌套标记,以及可能是任意嵌套标记。所以我必须提醒你..。
发布于 2011-01-04 22:33:15
这不是正常的行为吗?你有你的正则表达式的指定非贪婪选项吗?
https://stackoverflow.com/questions/4599107
复制相似问题