Нужна помощь с регулярным выражением

Тема в разделе "PHP", создана пользователем monz, 28 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. monz

    monz Создатель

    Регистр.:
    24 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Нужно на php с помощью регулярного выражения найти такой адрес:
    http://example.com/docs/confirm.phtml?login=mister8732&secret=hlKUXY
    Ввожу так:
    PHP:
    preg_match('#http://example.com/docs/confirm.phtml\?login=([a-z0-9]{5,})&secret=([a-zA-Z0-9]*)#i'$result$url);
    Все что идет до &secret - работает, как только доходит до слова secret регулярка ничего не находит, какое-то заколдованное слово)
    Помогите расколдовать пожалуйста :)
     
  2. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    В твоем примере все работает

    Код:
    <?
    
    $text = "http://example.com/docs/confirm.phtml?login=mister8732&secret=hlKUXY ";
    
    preg_match('#http://example.com/docs/confirm.phtml\?login=([a-z0-9]{5,})&secret=([a-zA-Z0-9]*)#i', $text, $out);
    
    print_r($out);  
    ?>
    
    Код:
    Array
    (
        [0] => http://example.com/docs/confirm.phtml?login=mister8732&secret=hlKUXY
        [1] => mister8732
        [2] => hlKUXY
    )
    
    Приведи кусок кода, который использует дальше $url
     
  3. monz

    monz Создатель

    Регистр.:
    24 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    После последнего символа 'Y' идет скорей всего перевод строки.
    Но я не пойму, когда я ввожу выражение вида:
    PHP:
    preg_match('#http://example.com/docs/confirm.phtml\?login=([a-z0-9]{5,})&secret=#i'$result$url);
    у меня ничего не находит вообще.
     
  4. Tima111

    Tima111 Читатель

    Заблокирован
    Регистр.:
    5 июл 2007
    Сообщения:
    218
    Симпатии:
    486
    Можно например сделать так:
    PHP:
    <?
    $text "http://example.com/docs/confirm.phtml?login=mister8732&secret=hlKUXY ";
    $text=trim($text);
    ?>
    Т.е. использовать функцию trim() для удаления пробелов и первододов строк по краям. А затем уже применить регулярное выражение.
    Не знаю может извращение :D
     
  5. legendar

    legendar Писатель

    Регистр.:
    9 дек 2008
    Сообщения:
    9
    Симпатии:
    1
    Код:
    preg_match('#http://example.com/docs/confirm.phtml\?login=([a-z0-9]{5,})&secret=([a-zA-Z0-9]*?)\s*#is', $result, $url);
    
     
  6. monz

    monz Создатель

    Регистр.:
    24 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Всё, спасибо, вопрос решен! Посмотрел, после url как и стоило ожидать стояли ".
    Сработал такой вариант:
    PHP:
    preg_match('#(http://example.com/docs/confirm.phtml\?login=(.*))"#U'$result$url);
    Элемент массива $url[1] как раз то, что было нужно.
     
Статус темы:
Закрыта.