我有一个很大的 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#
所以,我显然在模式上做错了,但我找不到解决这个问题的方法。有什么帮助吗?