[php]如何从长html源中提取单个简单文本

时间:2012-08-07 09:34:00

标签: php html regex parsing

我有一个像这样的HTML:

......whatever very long html.....

<span class="title">hello world!</span>

......whatever very long html......

这是一个非常长的HTML,我只想要内容'你好世界!'从这个HTML

我得到了这个HTML
$result = file_get_contents($url , false, $context);

很多人都在使用Simple HTML DOM解析器,但我想在这种情况下,使用正则表达式会更有效率。

我应该怎么做?有什么建议?任何帮助都会非常棒。

提前感谢!

2 个答案:

答案 0 :(得分:2)

坚持使用DOM解析器 - 它更好。话虽如此,你可以使用像这样的REGEX ......

// where the html is stored in `$html`
preg_match('/<span class="title">(.+?)<\/span>/', $html, $m);
$whatYouWant = $m[1];

preg_match()存储在正则表达式中括号内捕获的所有元素的数组,以及第0个元素,它是整个捕获的字符串。在这种情况下,正则表达式非常简单,几乎是你想要的直接字符串匹配,关闭span标记的斜杠转义。捕获的部分仅表示任何字符(.)一次或多次(+)非贪婪(?)。

答案 1 :(得分:0)

不,我真的不认为regEx或类似的功能会更有效或更容易。

如果你使用SimpleHTML DOM,你可以快速获得你想要的数据:

//Get your file
$html = file_get_html('myfile.html');
//Use jQuery style selectors
$spanValue = $html->find('span.title')->plaintext;

echo($spanValue);

使用preg_match你可以这样做:

preg_match("/<span class=\"title\">([^`]*?)<\/span>/", $data, $matches);

或者,如果有多个跨度与“标题”类:

preg_match_all("/<span class=\"title\">([^`]*?)<\/span>/", $data, $matches);