За последние 24 часа нас посетили 21297 программистов и 1694 робота. Сейчас ищут 1806 программистов ...

Как составить регулярку?

Тема в разделе "Регулярные выражения", создана пользователем FLASH911, 23 фев 2014.

  1. FLASH911

    FLASH911 Новичок

    С нами с:
    23 фев 2014
    Сообщения:
    1
    Симпатии:
    0
    Добрый день, уважаемые форумчане. Прошу помочь с регулярным выражением. Необходимо из [keyword=145],
    где может быть значением вместо 145 любое число, извлечь это число в переменную, а после заменить это выражение на другую переменную.
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Код (PHP):
    1. <?php
    2.  
    3. $text = '[keyword=145]';
    4. $pattern = '/\d+\b/';
    5.  
    6. preg_match($pattern, $text, $match);
    7. var_dump($match);
    8.  
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Малоли в друг, будут числа в названиях:
    [keyword1=145]
    /[^=]+(?=\])/
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а зачем усложнять?
    /=(\d+)/
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    У тебя 2-ой получается массив...
    Может мне ничего не надо лишнего.
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    и что? какая разница, взять это $matches[0] или $matches[1] ?

    во вторых, ваша регулярка делает лишнюю работу на каждом шаге поиска: первый шаблон [^=]+ срабатывает на каждом символе(пока не дойдет до =), и получается на каждом, ВСЕГДА идет вторая проверка на соотвествие второму подшаблону (?=\]), второй уже несоответствует, идет откат назад, и берется следующий символ... т.е. двойная(лишняя) проверка до тех пор пока не дойдет до символа '='

    в моей же - максимально быстро, сначала просто ищется символ '=', и вторая проверка на число - выполняется ТОЛЬКО когда будет найдено это '=', а когда ненайдено то просто переход к следующему симовлу, без доп. проверок
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Окай, окай, только не усердствуй...
    А то уже наверно вена вздулась :D
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    иногда лучше жевать чем говорить