Кто силен в регулярных выражениях

(Ответов: 17, Просмотров: 1097)
Страница 2 из 2 Первая 12
  1. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Даниэль Алиевский, Еще такой косяк, если между тегами есть пробел то все ломается.
    • 0
  2. Студент
    • Регистрация: 25.10.2013
    • Сообщений: 62
    • Репутация: 11
    Bposter, Между какими тегами?
    Если написать так
    <td> 12345 </td>
    то все работает. А вообще, пробелы описываются комбинацией \s+ (один или более пробелов) и \s* (ноль или более пробелов).
    • 0
  3. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Даниэль Алиевский, Страницу спарсил в переменную $result и там есть результат(проверил), но после регулярки не че не выводит

    Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 3 сообщение(ий)):
    У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
    • 0
  4. Студент
    • Регистрация: 25.10.2013
    • Сообщений: 62
    • Репутация: 11
    Bposter, и что, собственно, не нравится? Вы ищете ссылки, которые имеют вид href="http://ya.ru". Таких ссылок на загруженной странице нет. Соответственно, результат пустой. Подозреваю, вы хотели найти нечто другое, с другим href - вроде http :// translate.yandex.net/tr-url/ru-en.ru/www.yandex.ru/ Соответственно, нужно поменять регэксп.
    • 1

    Спасибо сказали:

    Bposter(28.10.2013),
  5. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Даниэль Алиевский, Както просмотрел но исходной код чюток другой идет, перед доменом идет еще это "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>
    '

    • 0
  6. Студент
    • Регистрация: 25.10.2013
    • Сообщений: 62
    • Репутация: 11
    Bposter,
    Код:
    <?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");  
      }
    }
    ?>
    Так работает. Между прочим, в вашем примере были две кавычки после href:
    Код:
    a href=""http
    Это, очевидно, неправильно.

    Замечание: точки и слеши (/) в регекспе необходимо экранировать, т.е. добавлять перед ними обратный слэш \. (Для дефиса, по-видимому, это необязательно, хотя на всякий случай можно сделать.) Это может стать проблемой, если вам нужно не константное регулярное выражение, как здесь, а зависящее от аргументов (скажем, "sait.ru" как значение переменной - кстати, по-английски site, а не sait). В этом случае нужно каким-то образом преобразовать строчную переменную, автоматически добавив нужные обратные слэши - для этого, в свою очередь, можно использовать регэксп. Другой вариант (более простой и естественный) - использовать регулярное выражение общего вида для любого URL, извлечь все такие URL в $matches вместе с числами и явно в цикле отыскать нужную пару URL-число.
    • 1

    Спасибо сказали:

    Bposter(30.10.2013),
  7. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Даниэль Алиевский, Не фига не получается хотя должно работать, переменную url я переназначил специально чтоб точку икранировать

    PHP код:

       $url 
    'webmasters.ru';
       
    $cur=curl_init();
       
    curl_setopt($curCURLOPT_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]; 
    • 0
  8. Студент
    • Регистрация: 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); 
    так у меня сработало.
    • 1

    Спасибо сказали:

    Bposter(30.10.2013),
Страница 2 из 2 Первая 12

Похожие темы

Темы Раздел Ответов Последний пост
Вопрос к знатокам регулярных выражений - как прописать фразу-исключение
Поисковые системы 4 15.12.2012 16:29
Бесплатный тестер регулярных выражений
Софт, скрипты, сервисы 0 21.09.2012 12:54

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры