我有以下模式:
<tbody>
<div id="aaa">Music</div>
Ggfdlkjgfds f$5 j3k
<div title="Song title #1"></div>
Fdjflkdsjfds
<div title="Song title #2"></div>
</tbody>
我必须提取#34;歌曲#1&#34;和#34;歌曲标题#2&#34;从这个字符串。
到目前为止,我写了这样的话:
(Music)(.*?)(title=\")(.*?)(\")(<\/tbody>)
但它不起作用。我怎么能这样做?
谢谢!
EDIT。这不是HTML,而是从Facebook用户页面加载的源代码部分。这些行之间基本上可以有任何内容,因此我只查找三个关键字:
Music
title="
</tbody>
想要在中间的比赛后找到所有比赛。
答案 0 :(得分:2)
又一个答案:-P
修改强> 由于有问题的新信息而更新。
$str = <<<EOS
<tbody>
<div id="aaa">Music</div>
Ggfdlkjgfds f$5 j3k
<div title="Song title #1"></div>
Fdjflkdsjfds
<div title="Song title #2"></div>
Foobarbaz
<div title="Song title #3"></div>
</tbody>
EOS;
// First find string between "Music" and "</tbody>"
if (preg_match('#\bMusic\b(.*?)</tbody>#s', $str, $r)) {
// Then get all song titles
preg_match_all('#.*?(?:title="(.*?)")#s', $r[1], $r);
print_r($r[1]);
}
输出:
Array
(
[0] => Song title #1
[1] => Song title #2
[2] => Song title #3
)
答案 1 :(得分:0)
不要使用正则表达式来解析HTML,HTML不是常规语言。使用其他工具,例如http://simplehtmldom.sourceforge.net/。
有用的帖子在SO:
Why it's not possible to use regex to parse HTML/XML: a formal explanation in layman's terms