Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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
Preg在html标记之间匹配php中的文本_Php_Parsing_Preg Match - Fatal编程技术网

Preg在html标记之间匹配php中的文本

Preg在html标记之间匹配php中的文本,php,parsing,preg-match,Php,Parsing,Preg Match,您好,我想在PHP中使用preg_match来解析html文档中的“所需文本” <p class="review"> Desired text </p> 所需文本 通常我会使用simple_html_dom来处理这些事情,但在这种情况下它不能被使用(上面的元素并没有出现在每个需要的div标记中,所以我不得不使用这种方法来精确跟踪它没有出现的时间,然后相应地从simple_html_dom调整我的数组) 无论如何,这会解决我的问题 非常感谢。preg\u match(“

您好,我想在PHP中使用preg_match来解析html文档中的“所需文本”

<p class="review"> Desired text </p>
所需文本

通常我会使用simple_html_dom来处理这些事情,但在这种情况下它不能被使用(上面的元素并没有出现在每个需要的div标记中,所以我不得不使用这种方法来精确跟踪它没有出现的时间,然后相应地从simple_html_dom调整我的数组)

无论如何,这会解决我的问题

非常感谢。

preg\u match(“

(.*)

'si',$source,$match);
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
如果($match)echo“result=”.$match[1];
如果要匹配的字符串有多行,并且是:

<p class="review"> Desired text1 </p>
<p class="review"> Desired text2 </p>
<p class="review"> Desired text3 </p>
所需文本1

所需文本2

所需文本3

该模式将匹配一次,匹配的内容将是字符串中的所有内容

我认为更好的模式是:

"'<p class=\"review\">([^<]*)</p>'si"

“'

([^如果要返回多个匹配项,则需要使用preg\u match\u all()。然后循环第二个结果组($match[1]),以仅获取标记之间的内容

$source = "<p class=\"review\"> Desired text1 </p>".
"<p class=\"review\"> Desired text2 </p>".
"<p class=\"review\"> Desired text3 </p>";


    preg_match_all("'<p class=\"review\">(.*?)</p>'si", $source, $match);

    foreach($match[1] as $val)
    {
        echo $val."<br>";


    }

Outputs:

Desired text1
Desired text2
Desired text3 
$source=“

所需的文本1

。 “

所需文本2

”。 “

所需文本3

”; preg\u match\u all(“'p class=\'review\'”>(.*)

'si',$source,$match); foreach($val匹配[1] { echo$val.“
”; } 产出: 所需文本1 所需文本2 所需文本3
效果很好。为我节省了你在那里的几个小时,非常感谢。这不可能超过我吗?请参阅下面的答案。它不会因为懒惰的量化而超过我。
*?
将尽可能少地抓取,而
*
将尽可能多地抓取。是的,谢谢,我在过去的两个小时和更长的时间里一直在尝试这些东西在页面加载之后,我终于意识到股票是用JavaScript显示的:((是的,这就是为什么脚本不能工作的原因,谢谢