Задать вопрос
Publion
@Publion

Как правильно составить регулярное выражение?

Суть вопроса: учусь писать парсер сайта.

Есть таблица, из которой мне требуется извлечь данные, пример строчки:
<tr onclick="ccl(152, 93, 56, 1)">
<td class="bj"><div class="pa labpad1"><a href="http://site.ru" onclick="return fco(152)"></a><div class="pc"><div class="ca">Name</div></div></div></td>
<td class="bi">1 <small>BTC</small></td>
<td class="bi">10 826.3640 <small>Random text</small></td>
<td class="ar arp" title="Title">161 608</td>
</tr>


Надо вытащить следующие значения(выделяю жирным):
Name, 10 826.3640, 161 608

Понятное дело, что все надписи и значения уникальны для каждой строчки таблицы.

Первое значение вытаскиваю без проблем.
preg_match_all( '/<div class=\"ca\">(.*?)<\\/div>/is' , $text , $name ); //Name выводит


Со вторым не справился, т.к. 2 td с классом "bi" и разным значением в small, придумал такое решение
preg_match_all( '/[0-9]{2}\s[0-9]{3}\.[0-9]{4}/is' , $text , $item ); //10 826.3640 выводит

но это следует переписать, т.к. если допустим число станет равно 9 тысячам, код не сработает

Ну и для третьего варианта не придумал решения, т.к. тайтл разный

Помогите составить правильные регулярные выражения, чтобы вытащить значения:
Name, 10 826.3640, 161 608
  • Вопрос задан
  • 353 просмотра
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
@OVK2015
Забирайте. Если в таблице будет несколько нужных строк,- нужно будет два прохода делать
$testStr = '<tr onclick="ccl(152, 93, 56, 1)">
<td class="bj"><div class="pa labpad1"><a href="http://site.ru" onclick="return fco(152)"></a><div class="pc"><div class="ca">Name</div></div></div></td>
<td class="bi">1 <small>BTC</small></td>
<td class="bi">10 826.3640 <small>Random text</small></td>
<td class="ar arp" title="Title">161 608</td>
</tr>';

	$regExpWrepper = 
		"#class=\"ca\">(.*?)<(?:.*?)<td(?:.*?)</td>".
		"(?:.*?)class=\"bi\">(.*?)<".
		"(?:.*?)title(?:.*?)>(.*?)<".
		"#si";
	preg_match_all($regExpWrepper, $testStr, $matches, PREG_SET_ORDER);
	echo trim($matches[0][1]).", ".trim($matches[0][2]).", ".trim($matches[0][3])."\n";
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kawabanga
@kawabanga
Зачем вам рег выражения?
Тащите через xpath
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы