1

我有一个这样的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);

很多人都在使用简单的 HTML DOM 解析器,但我认为在这种情况下,使用正则表达式会更有效。

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

提前致谢!

4

2 回答 2

2

坚持使用 DOM 解析器——它更好。话虽如此,你可以使用这样的正则表达式......

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

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

于 2012-08-07T09:39:00.800 回答
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);
于 2012-08-07T09:43:03.907 回答