RegEx:匹配不在HTML标记内部和部分HTML标记的文本

时间:2009-06-09 15:20:28

标签: regex

如何匹配HTML标记之外的所有内容?

我的伪HTML是:

<h1>aaa</h1>
bbb <img src="bla" /> ccc
<div>ddd</div>

我使用正则表达式

(?<=^|>)[^><]+?(?=<|$)

这会给我:“aaa bbb ccc ddd”

我需要的是一种忽略HTML标签的方法,返回:“bbb ccc”

3 个答案:

答案 0 :(得分:6)

正则表达式是一种笨重且不可靠的标记工作方式。我建议使用DOM解析器,例如SimpleHtmlDom

//get the textual content of all hyperlinks on specified page.
//you can use selectors, e.g. 'a.pretty' - see the docs
echo file_get_html('http://www.example.org')->find('a')->plaintext; 

如果您想在客户端上执行此操作,可以使用jQuery之类的库,如下所示:

$('a').each(function() {
    alert($(this).text());
});

答案 1 :(得分:0)

查找适当的正则表达式以匹配完整标记(例如,在像http://regexlib.com/这样的库中)并使用替换运算符将其删除 小号///。然后用剩下的。

答案 2 :(得分:0)

谢谢大家,

两者的表达式都是肮脏的工作,但我想要相反的输出。

(\<(.*?)\>)(.*?)(\<\/(.*?)\>)|(<[a-zA-Z\/][^>]*>)

as伪字符串:

<h1>aaa</h1>

bbb <img src="bla" /> ccc

<div>ddd</div> jhgvjhgjh zhg zt <div>ddd</div>

<div>dsada</div> hbhgjh

为简化起见,我使用this tool