<h2 class="element">
name
</h2>
<div class="outerElement">
address
</div>
<h2 class="element">
name
</h2>
<div class="outerElement">
address
</div>
我需要获得一个正则表达式,它将在<h2 class="element">
到下一个<h2 class="element">
之间获得所有内容,所以我想出了这个:
preg_match_all('/div class="outerElement"(.*?)div class="outerElement"/', $content, $elements);
但由于某种原因它不起作用(我是否必须逃避双引号或问题是什么?
答案 0 :(得分:2)
将“s”修饰符添加到这样的表达式中:
'/div class="outerElement"(.*?)div class="outerElement"/s'
这是强制多行模式匹配所必需的。
答案 1 :(得分:0)
不要在这里使用正则表达式。 请改用PHP DOM解析。您的任务将更容易,也不容易出错。
http://www.php.net/manual/en/domdocument.getelementsbytagname.php
答案 2 :(得分:0)
以下正则表达式捕获第1组中的所有匹配项。
正如您所说,您需要使用preg_match_all迭代匹配。
为方便起见,这里是空白模式下的正则表达式。
(?xs) # modes: whitespace, dot matches new line
(?<=<h2[ ]class="element">) # is there an element h2 tag behind us
\W* # match any non-word char (greedy)
(\w.*?) # capture a word char followed by any char (lazy)
<h2[ ]class="element" # match the next class element
这是一个使用此正则表达式并返回捕获的组的preg_match_all示例。我用你的样本字符串测试了它。有用。 :)
<?php
$subject='<h2 class="element">
name
</h2>
<div class="outerElement">
address
</div>
<h2 class="element">
name
</h2>
<div class="outerElement">
address
</div>
';
preg_match_all('/(?xs) # modes: whitespace, dot matches new line
(?<=<h2[ ]class="element">) # is there an element h2 tag behind us
\W* # match any non-word char (greedy)
(\w.*?) # capture a word char followed by any char (lazy)
<h2[ ]class="element" # match the next class element
/s', $subject, $all_matches, PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER);
$size=count($all_matches[1]);
echo "<br />*****************<br />";
echo "Number of Matches: ".$size."<br />";
echo "*****************<br />";
for ($i=0;$i<$size;$i++) {
echo "Match number: ".($i+1)."<br />";
echo "At position: ".$all_matches[1][$i][1]."<br />";
echo "Captured text: ".htmlentities($all_matches[1][$i][0])."<br />";
}
echo "End of Matches<br />";
echo "*****************<br /><br />";
?>
最后,这是输出:
*****************
Number of Matches: 1
*****************
Match number: 1
At position: 22
Captured text: name </h2> <div class="outerElement"> address </div>
End of Matches
*****************
如果我明白,这就是你要找的东西。