【问题标题】:RegEx: Matching text that is not inside and part of a HTML tag正则表达式:匹配不在 HTML 标记内部和一部分的文本
【发布时间】:2011-09-28 05:59:09
【问题描述】:

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

我的伪 HTML 是:

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

我用的是正则表达式,

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

这会给我:“aaa bbb ccc ddd”

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

【问题讨论】:

标签: regex


【解决方案1】:

正则表达式是处理标记的笨重且不可靠的方式。我建议使用 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());
});

【讨论】:

    【解决方案2】:

    寻找一个合适的正则表达式来匹配完整的标签(例如在像http://regexlib.com/这样的库中)并使用替换运算符删除它们 s///。然后使用剩下的。

    【讨论】:

    • 我用过这个,但是这个表达式打错了:s/(\)(.*?)(\ )|(]*>)//|(?)[^>
    【解决方案3】:

    谢谢大家,

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

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

    作为伪字符串:

    <h1>aaa</h1>
    
    bbb <img src="bla" /> ccc
    
    <div>ddd</div> jhgvjhgjh zhg zt <div>ddd</div>
    
    <div>dsada</div> hbhgjh
    

    为简单起见,我使用this tool

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多