Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用正则表达式从属性中提取数据_Php_Regex - Fatal编程技术网

Php 使用正则表达式从属性中提取数据

Php 使用正则表达式从属性中提取数据,php,regex,Php,Regex,我有以下模式: <tbody> <div id="aaa">Music</div> Ggfdlkjgfds f$5 j3k <div title="Song title #1"></div> Fdjflkdsjfds <div title="Song title #2"></div> </tbody> 音乐 Ggfdlkjgfds 5 j3k美元 Fdjflkdsjfds 我必须从这

我有以下模式:

<tbody>
 <div id="aaa">Music</div>
 Ggfdlkjgfds f$5 j3k 
 <div title="Song title #1"></div>
 Fdjflkdsjfds
 <div title="Song title #2"></div>
</tbody>

音乐
Ggfdlkjgfds 5 j3k美元
Fdjflkdsjfds
我必须从这个字符串中提取“歌曲标题#1”和“歌曲标题#2”

到目前为止,我写了这样的东西:

(Music)(.*?)(title=\")(.*?)(\")(<\/tbody>)
(音乐)(.*)(标题=\”)(.*)(\”)
但它不起作用。我该怎么做

谢谢

编辑。这不是HTML,而是源代码的一部分,从facebook用户页面加载。这些行之间基本上可以有任何内容,因此我只查找三个关键字:

Music
title="
</tbody>
音乐
标题=”

并希望在中间一个之后找到所有匹配项。

不要使用正则表达式来解析HTML,HTML不是一种正则语言。请使用其他工具,如

在此处发布有用的帖子,以便:

还有一个答案:-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]);
}

我认为你不需要逃避正斜杠。你还写了tbody而不是div。将DOMDocument与DOMXPath一起使用。我必须处理数千个请求,这太慢了。这是来自facebook的。幸好他当时没有解析html,他只是想从文本块中提取一个值。顺便说一句,使用正则表达式可能不太好是的,但不是出于理论原因(仔细阅读链接问题下的注释)。HTML不是常规语言这一事实是错误的。主要问题是,当你看到结构化语言时,当使用的语言(php)时,没有真正的理由使用文本方法有libxml的内置实现。关于simplehtmldom,我认为这个lib没有用,速度慢,也不那么简单(我建议您看看代码)。
Array
(
    [0] => Song title #1
    [1] => Song title #2
    [2] => Song title #3
)