我有一个很大的HTML文本要用PHP脚本解析。我需要找到(并在屏幕上打印)之间的文字:
<span style="color:COLOR">#</span>
和
<span class="close">#</span>
其中COLOR可以是“红色”,“绿色”或“蓝色”。
我写了三个循环,每个循环都有颜色,所以我的代码目前如下:
preg_match_all("'red\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
foreach($match[1] as $val) {
echo $val;
}
preg_match_all("'green\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
foreach($match[1] as $val) {
echo $val;
}
preg_match_all("'blue\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);
foreach($match[1] as $val) {
echo $val;
}
一切正常,但我有两个问题:
所以我需要找到一种方法来使用OR条件搜索文本的所有部分。
然后我写了这段代码:
$patterns = array(
'green\">#<\/span>(.*?)<span class=\"close\">#<\/span>',
'red\">#<\/span>(.*?)<span class=\"close\">#<\/span>',
'blue\">#<\/span>(.*?)<span class=\"close\">#<\/span>'
);
$rule= '/(' .implode('|', $patterns) .')/i';
$text = 'Lorem ipsum dolor sit amet, <span style="color:red">#</span>consectetur adipiscing elit<span class="close">#</span>.
Vestibulum ante lectus, <span style="color:green">#</span>pellentesque ac accumsan sit amet, posuere tempor<span class="close">#</span> ligula.';
preg_match_all($rule, $text, $match);
foreach($match[1] as $val) {
echo "<pre>".$val."</pre><br />";
}
我期望在屏幕上找到的内容:
consectetur adipiscing elit
pellentesque ac accumsan sit amet, posuere tempor
我真正得到的是:
red">#consectetur adipiscing elit#
green">#pellentesque ac accumsan sit amet, posuere tempor#
所以,我显然对模式做错了,但我找不到解决这个问题的方法。有什么帮助吗?
答案 0 :(得分:1)
您可以将alternation用于此
(?:red|green|blue)\">#</span>(.*?)<span class=\"close\">#</span>
答案 1 :(得分:0)
它必须是'红色','绿色','蓝色'?不能是'颜色:任何'?
preg_match_all("'color:.+?\">#</span>(.*?)<span class=\"close\">#</span>'si", $text, $match);