使用PHP中的正则表达式匹配两个HTML标记之间的所有文本

时间:2011-05-19 12:58:09

标签: php regex preg-match

我遇到了正则表达式模式的问题。结果返回两个数组......这是我的代码:

$code = preg_match_all("/\< style\>(.*?)\<\/style\>/",$code,$matches);
var_dump($matches);

作为测试我设置:

$code = ">< xxxxx> try blah fooo blah   < /xxxxx> idfidf oh < x>< /x> < style> blah blah blah style1 < /style>< style>blah blah style 2 x< /style>

它返回2个数组,我的意思是

$matches = array
    0 => array
        0 => string '< style> blah blah blah style1 < /style>' (length=38)
        1 => string '< style>blah blah style 2 x< /style>' (length=34)
    1 => array
        0 => string ' blah blah blah style1 ' (length=23)
        1 => string 'blah blah style 2 x' (length=19)

我想要的匹配是在第二个数组中。我在标签之间放置了空格,因为编辑器没有显示HTML标签。

3 个答案:

答案 0 :(得分:1)

你试过这个:

echo $matches[0];
echo $matches[1]; // and so on, depend in the number of matches.

答案 1 :(得分:1)

以下代码对我有用:

$code = "<xxxxx> try blah fooo blah </xxxxx> idfidf oh <x></x> <style> blah blah blah style1 </style><style>blah blah style 2 x</style>";
$code = preg_match_all("~<style>(.*?)</style>~si", $code, $matches);
var_dump($matches[1]);
  • 修饰符s适用于DOT_ALL(包括换行符)
  • 修饰符i用于忽略大小写匹配

输出

array(2) {
  [0]=>
  string(23) " blah blah blah style1 "
  [1]=>
  string(19) "blah blah style 2 x"
}

然而,只是为了让您知道从正则表达式解析HTML不是一个好主意,您最好使用许多可用于PHP的HTML解析器。

答案 2 :(得分:0)

如何使用Xpath? http://nl.php.net/manual/en/class.domxpath.php

适合我(大部分时间,都是;))