У меня есть большой HTML-текст для анализа с помощью PHP-скрипта. Мне нужно найти (и распечатать на экране) текст между:
<span style="color:COLOR">#</span>
и
<span class="close">#</span>
где ЦВЕТ может быть «красным», «зеленым» или «синим».
Я написал ТРИ цикла, каждый для любого цвета, поэтому мой код на данный момент следующий:
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;
}
Все работает нормально, но у меня есть две проблемы с этим:
- Таким образом, я нахожу все части текста между красными метками, ЗАТЕМ все части текста между зелеными метками и, НАКОНЕЦ, все части текста между синими метками (но я хочу найти их в точном порядке, в котором они появляются в тексте).
- Весь этот повторяющийся код... у меня болит сердце.
Поэтому мне нужно было найти способ поиска всех частей текста с использованием условия ИЛИ.
Тогда я написал этот кусок кода:
$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#
Итак, я, очевидно, делаю что-то не так с шаблоном, но я не могу найти способ решить эту проблему. Любая помощь?