Даниэль Алиевский, Еще такой косяк, если между тегами есть пробел то все ломается.
- 27.10.2013 18:27
- 27.10.2013 18:29Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Bposter, Между какими тегами?
Если написать так
<td> 12345 </td>
то все работает. А вообще, пробелы описываются комбинацией \s+ (один или более пробелов) и \s* (ноль или более пробелов). - 27.10.2013 20:47
Даниэль Алиевский, Страницу спарсил в переменную $result и там есть результат(проверил), но после регулярки не че не выводит
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 3 сообщение(ий)):У вас нет прав чтобы видеть скрытый текст, содержащийся здесь. - 28.10.2013 00:26Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Bposter, и что, собственно, не нравится? Вы ищете ссылки, которые имеют вид href="http://ya.ru". Таких ссылок на загруженной странице нет. Соответственно, результат пустой. Подозреваю, вы хотели найти нечто другое, с другим href - вроде http :// translate.yandex.net/tr-url/ru-en.ru/www.yandex.ru/ Соответственно, нужно поменять регэксп.
Спасибо сказали:
Bposter(28.10.2013), - 30.10.2013 17:14
Даниэль Алиевский, Както просмотрел но исходной код чюток другой идет, перед доменом идет еще это "http://translate.yandex.net/tr-url/ru-en.ru/ и после ссылки еще один див с текстом.
PHP код:$a = '<td><a href=""http://translate.yandex.net/tr-url/ru-en.ru/sait.ru/">текст текст</a><div>тут текст пробелы цыфры символы могут быть</div></td> <td>4302</td> </tr>
';
- 30.10.2013 17:48Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Bposter,
Код:Так работает. Между прочим, в вашем примере были две кавычки после href:<?php $a = '<td><a href="http://translate.yandex.net/tr-url/ru-en.ru/sait.ru/">текст текст</a><div>тут текст пробелы цыфры символы могут быть</div></td> <td>4302</td> </tr>'; $matches = array(); preg_match_all('/<a\s+href=\"http:\/\/translate\.yandex\.net\/tr\-url\/ru\-en\.ru\/sait\.ru\/\".*?<td>\s*(\d+)\s*<\/td>/', $a, $matches); print("Search in $a\n"); for ($k = 0; $k < count($matches); $k++) { print ("$k: found ".count($matches[$k])." matches\n"); for ($i = 0; $i < count($matches[$k]); $i++) { print($k.",".$i . ": " . $matches[$k][$i] . "\n"); } } ?>Код:Это, очевидно, неправильно.a href=""http
Замечание: точки и слеши (/) в регекспе необходимо экранировать, т.е. добавлять перед ними обратный слэш \. (Для дефиса, по-видимому, это необязательно, хотя на всякий случай можно сделать.) Это может стать проблемой, если вам нужно не константное регулярное выражение, как здесь, а зависящее от аргументов (скажем, "sait.ru" как значение переменной - кстати, по-английски site, а не sait). В этом случае нужно каким-то образом преобразовать строчную переменную, автоматически добавив нужные обратные слэши - для этого, в свою очередь, можно использовать регэксп. Другой вариант (более простой и естественный) - использовать регулярное выражение общего вида для любого URL, извлечь все такие URL в $matches вместе с числами и явно в цикле отыскать нужную пару URL-число.Спасибо сказали:
Bposter(30.10.2013), - 30.10.2013 18:42
Даниэль Алиевский, Не фига не получается
хотя должно работать, переменную url я переназначил специально чтоб точку икранировать
PHP код:
$url = 'webmasters.ru';
$cur=curl_init();
curl_setopt($cur, CURLOPT_URL, "http://translate.yandex.net/tr-url/en+ru.ru/yaca.yandex.ua/yca/cy/ch/".$url."/?ncrnd=9951&nocookiesupport=yes");
curl_setopt($cur,CURLOPT_USERAGENT,"Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.10");
curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($cur);
curl_close($cur);
$url = 'webmasters\.ru';
$matches = array();
preg_match_all('/<a\s+href=\"http:\/\/translate\.yandex\.net\/tr\-url\/ru\-en\.ru\/'.$url.'\/\".*?<td>\s*(\d+)\s*<\/td>/', $result, $matches);
echo $matches[1][0];
- 30.10.2013 18:54Студент

- Регистрация: 25.10.2013
- Сообщений: 62
- Репутация: 11
Надеюсь, последняя проблема - в конце регэкспа нужно добавить модификатор /s. Иначе оно не понимает, что точка (.*?) соответствует также символам перевода строки.
PHP код:так у меня сработало.preg_match_all('/<a\s+href=\"http:\/\/translate\.yandex\.net\/tr\-url\/ru\-en\.ru\/'.$url.'\/\".*?<td>\s*(\d+)\s*<\/td>/s', $a, $matches);
Спасибо сказали:
Bposter(30.10.2013),
Тэги топика:
Похожие темы
| Темы | Раздел | Ответов | Последний пост |
|---|---|---|---|
Вопрос к знатокам регулярных выражений - как прописать фразу-исключение | Поисковые системы | 4 | 15.12.2012 16:29 |
Бесплатный тестер регулярных выражений | Софт, скрипты, сервисы | 0 | 21.09.2012 12:54 |



