Добрый день, есть html код в переменной $a
Код HTML:Как на регулярке вытащить число 4300? ключевым моментом является то что мы знаем что число идет после ссылки sait2.ru в тегах <td></td>$a = '<td><a href="http://sait.ru/">текст текст</a></td> <td>4302</td> <td><a href="http://sait2.ru/">текст текст</a></td> <td>4300</td></tr> ';
- 27.10.2013 13:11
- 27.10.2013 13:46
Bposter, я бы на вашем месте воспользовался библиотекой HTML Dom - она просто в использовании и выполнение вашей задачи отнимет буквально 2-3 строки кода. На Хабре есть неплохое описание работы.
Спасибо сказали:
Bposter(27.10.2013), - 27.10.2013 14:10
Полезная штука html dom. А тс-у просто перебор по условию, что есть только цифры. Но регулярке, если не забыл вот так ("/(\d+)/i")
- 27.10.2013 17:49Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Bposter,
Примерно так:
/<\s+href=\"\/sait2\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/
Смысл: вначале идет ваша ссылка (точки, кавычки, косые черты экранируем с помощью \), затем идет произвольное количество любых символов .*?, затем тег <td>, возможно произвольное число пробельных символов \s*, цепочка цифр, произвольное число пробельных символов, </td>. Вопросительный знак в .*? означает, что поиск нужно ограничить поиск минимумом (а не искать до последней цепочки цифр в тексте). Но имейте в виду, что если после вашей ссылки все же не будет цепочки цифры внутри <td>...</td>, то регулярка будет искать по всему имеющемуся тексту, пока не отыщет аналогичную цепочку цифр внутри <td>...</td> где-нибудь потом.Спасибо сказали:
Bposter(27.10.2013), - 27.10.2013 18:23
Даниэль Алиевский, Пустой массив выдает
PHP код:$mathes = array();
preg_match_all('/<\s+href=\"\/sait2\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/', $a, $mathes);
print_r($mathes);
- 27.10.2013 18:32
При парсе не заморачиваюсь с регулярками, быстро забываю как ими пользоваться. Иду внаглую разбирать текст.
Из примера будут коменты:PHP код:Конечно если это личная страница, а не общественная. Вполне что работать будет чуть дольше чем регулярки, но по крайней мере не надо заморачиваться в синтаксисе.$r2=explode('sait2.ru',$a);//разбили и во 2 элементе /">текст текст</a></td> <td>4300</td></tr>
$r3=explode('<td>',$r2[1]);//разбили и во 2 элементе 4300</td></tr>
$r4=explode('</td>',$r3[1]);//разбили и в 1 элементе 4300
$chislo=r4[0];
- 27.10.2013 18:37
brainix, Дело в том что там не две таблицы, и ссылок много разных, это если бы я получил бы тока две строки тогда да а так такой вариант не подходит.
- 27.10.2013 18:56Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Bposter,
Я сказал "примерно" :) и постарался объяснить принципы. Даже у меня редко получается, что регулярка сразу работает без отладки. Я нечаянно пропустил тег a и слово http:. Вот так работает:
$a = '<td><a href="http://sait.ru/">текст текст</a></td> <td>4302</td> <td><a href="http://sait2.ru/">текст текст</a></td> <td>4300</td></tr>';
$matches = array();
preg_match_all('/<a\s+href=\"http:\/\/sait2\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/', $a, $matches);
for ($k = 0; $k < count($matches); $k++)
for ($i = 0; $i < count($matches[$k]); $i++) {
print($k.",".$i . ": " . $matches[$k][$i] . "\n");
} - 27.10.2013 19:10
Даниэль Алиевский, Ясно спасибо теперь все пашет :)
- 27.10.2013 19:13Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Пожалуйста. Обращайтесь :)
Тэги топика:
Похожие темы
| Темы | Раздел | Ответов | Последний пост |
|---|---|---|---|
Вопрос к знатокам регулярных выражений - как прописать фразу-исключение | Поисковые системы | 4 | 15.12.2012 17:29 |
Бесплатный тестер регулярных выражений | Софт, скрипты, сервисы | 0 | 21.09.2012 13:54 |









