这是一个挑战!
正如标题所说,我想匹配除标签内容以外的所有内容< pre>,< code>和< textarea>在HTML文档中(例如,您可以尝试以下文本)。
我的目的是压缩html,删除\ n \ t \ r \ n和其他清理,除非在textarea中严格要求。
当我在PHP工作时,我还考虑过提取这些标签内容,在PHP中处理其余部分并在PHP中重新注入它们。但是我很想知道在regexp中这样做的方法!
我尝试使用优秀的在线编辑器:http://regex101.com/表达式((?=.?)((?!<pre>).))
,标记为“msg”但不完全符合我的要求。
任何帮助将不胜感激!
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna <span>aliquam</span> erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. <pre>Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem.</pre> Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. <pre>Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima.</pre> Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
答案 0 :(得分:1)
如果你想要解析html,我建议你使用PHP DOMxpath或类似的,因为它意味着并专门用于该任务。您会找到Chrome扩展程序来测试您的查询。
同时阅读这个答案,很有趣:You can't parse [X]HTML with regex. Because HTML can't be parsed by regex被投票超过4400次
编辑:说到这一点,可能是你需要解析片段或不是有效的html,然后我会选择像Steve P回答的“简单”正则表达式方法。
答案 1 :(得分:0)
假设你想要捕捉标签之间的内容:
regex = "<((?!pre|code|textarea))>([^<]+)</\1>"
(?!...)
是一个负面的预测
([^<]+)
组并捕获1个或多个不是<
的字符
\1
指的是原始捕获组(标记)
这是基于<
不是标签之间的有效字符的假设,这意味着标签不是嵌套的。如果上述限制不正确,您将无法使用正则表达式解析HTML,请参阅每个人引用的obligatory post,这是有充分理由的。