Не могу разобрать с регулярным выражением

Статус
В этой теме нельзя размещать новые ответы.

STsoldier

Постоялец
Регистрация
9 Дек 2008
Сообщения
96
Реакции
38
Есть HTML код:
HTML:
<tr>
<td class='left'>some txt <span style='color:#444'>OK</span></td>
<td class='left'>some txt</td>
</tr>
<tr>
<td class='left'>some txt <span style='color:#ffffff'>OK</span></td>
<td class='left'>some txt</td>
</tr>
<tr>
<td class='left'>some txt <span style='color:#ff0000'>OK</span></td>
<td class='left'>some txt</td>
</tr>
<tr>
<td class='left'>some txt <span style='color:#ffffff'>OK</span></td>
<td class='left'>some txt</td>
</tr>
Я написал регулярное выражение, чтобы получить все между <tr>...</tr> имеющее внутри color:#ff0000. Вот оно
<tr>.*<span style='color:#ff0000'>OK<\/span>.*?<\/tr>
Но это выражение находит не один блок <tr>...</tr>, а еще два расположенных выше.
Какое нужно регулярное выражение, чтобы найти четко блок <tr>...</tr> имеющий внутри color:#ff0000 ? Спасибо.
 
быстрее будет работать, если выбрать все данные между <tr></tr>, а потом пробежаться по ним в цикле и проверить на вхождение строки:

PHP:
$html = <<<HTML
<tr>
	<td class='left'>some txt <span style='color:#444'>OK</span></td>
	<td class='left'>some txt</td>
</tr>
<tr>
	<td class='left'>some txt <span style='color:#ffffff'>OK</span></td>
	<td class='left'>some txt</td>
</tr>
<tr>
	<td class='left'>some txt <span style='color:#ff0000'>OK</span></td>
	<td class='left'>some txt</td>
</tr>
<tr>
	<td class='left'>some txt <span style='color:#ffffff'>OK</span></td>
	<td class='left'>some txt</td>
</tr>
HTML;

preg_match_all("`<tr>(.*?)<\/tr>`is", $html, $res);

$return = array();
foreach($res[1] as $tr)
{
	if(strpos($tr, "#ff0000") !== false)
		$return[] = trim($tr);
}

print_r($return);
 
такой вариант
Код:
<td.*>.*<span style='color:#ff0000'>OK<\/span>.*?<\/td>
тоже работает.
 
я осмелюс порекомендовать вариант:
Код:
<td.*?'color:#ff0000'.*?</td>
ТС просил блок содержащий цвет без остальных примочек.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху