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
  • Вопрос задан
  • 351 просмотр
Решения вопроса 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 Куратор тега PHP
Бью себя по рукам за каждый ответ на глупый вопрос
Зачем вам рег выражения?
Тащите через xpath
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
The ZAL Москва
от 140 000 до 180 000 ₽
Директ Кредит Казань
от 70 000 до 120 000 ₽
АКМЭ сервис Санкт-Петербург
от 120 000 до 150 000 ₽
12 авг. 2020, в 23:54
25000 руб./за проект
12 авг. 2020, в 23:41
6000 руб./за проект
12 авг. 2020, в 20:48
10000 руб./за проект