正则表达式在字符串里面找到字符串

时间:2009-09-02 20:49:53

标签: regex

让我们说我需要在一些h1,h2或h3标签中找到一个字符串

/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/

如果用户决定对标题采取合理的方法,这非常有用:

<h1>My Header</h1>

但是了解我的用户,他们想要大胆,斜体,带下划线的h1。并且他们有编码泥潭tinyMCE来帮助他们做到这一点。 TinyMCE将输出:

<h1><b><span style='text-decoration: underline'><i>My Hideous Header</i></span></b></h1>

所以我的问题是:

我如何在h1 h2或h3中找到一个字符串,然后在任何数量的周围其他标签内?

谢谢, 乔

3 个答案:

答案 0 :(得分:3)

/<(h[1-3])[^>]*>(?:.*?>)?([^<]+)(?:<.*?)?<\/\1>/i

制作破坏它的案例并不会太难,因为(我相信人们会告诉你)解析HTML是HTML解析器的工作,而不是正则表达式,但它适用于您的给定案例和各种类似的。

答案 1 :(得分:1)

如果您使用的是php,则可以使用正则表达式:

/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/

然后通过strip_tags()函数传递捕获的结果,以消除内部的所有精神错乱。

如果你不在php上,你可以通过regexp replace传递结果,删除标签。像替换的东西 /<\/?[^>]+?>/ 用空字符串。

答案 2 :(得分:-1)

如果您只想捕获最终嵌套的文本,您可以删除标题标记内的所有标记:

/<([hH][1-3]).*>(.*?)<.*\/$1>/

未经测试,但我认为它应该有用。