如何在php上使用preg_match_all选择两种模式之间的内容?

时间:2012-10-10 06:42:48

标签: php html regex preg-match-all

我试图搜索两个HTML标签,并抓住其间的所有内容。当我单独尝试每个标签时,它会发现它们很好,所以我知道它们拼写正确且存在。我认为问题在于模式,有人可以帮助我。 我在网上研究的一切似乎都在我脑海中。所以,如果你能解释你的模式是如何工作的,那就太棒了!

请参阅下面的代码,如果您有任何问题,请随时提出。

感谢您的时间:)

<?php
$date= date(Y)."/".date(n)."/".date(j);
$address= "http:www.example.com/".$date;
$text_page = file_get_contents("$address");

$searchfor1 = '<li id="menuSynchronizeSwitch">';
$searchfor2 = '<li  id="footerPrevWeek';

header('Content-Type: text/plain');

$pattern1 = preg_quote($searchfor1, '/');
$pattern2 = preg_quote($searchfor2, '/');

$pattern = "/^.*$pattern1.*\r*$pattern2.*\$/m";


if(preg_match_all($pattern, $text_page, $matches)){
   echo "Found matches:\n";
   echo implode("\n", $matches[0]);
}
else{
   echo "No matches found";
}
?>

2 个答案:

答案 0 :(得分:1)

尝试使用$pattern = '/\<li id\="menuSynchronizeSwitch"\>.*\<li id\="footerPrevWeek/si';。注意/s,它允许点匹配换行符,我怀疑这是导致失败的原因。

答案 1 :(得分:0)

您需要使用括号

对每个模式进行分组 像这样:

$ pattern =&#34; /(某种模式)/&#34 ;;

您可以通过$ matches数组

获取每个组