Регулярные выражения какие символы экранировать - спец символы - php: * \ + $ . [] {} | ?

  1. \ - символ экранирования.
    Пример:
    '/qwe\/rty/' 

    - соответствует строке, в которой есть qwe/try. Символ / мы заэкранировали, после чего он перестал выполнять в данном месте свое специальное значение (он являлся ограничителем шаблона).

  2. ^ - символ начала данных.
  3. $ - символ конца данных.
    Пример:
     '/^pattern$/'

    - Соответствует строке, точно совпадающей с словом pattern. Т.е. с буквы p строка начинается и после n заканчивается.

  4. . - любой символ, кроме перевода строки. Но естьмодификатор, при использовании которого перевод строки тоже относится к "любым" символам.
    Пример:
     '/pat.ern/'

    - Соответствует и строке, содержащей pattern, или patdern, или pat3ern...

  5. [] - внутри этих скобок перечисляются символы, любой один символ из которых может стоять на данном месте. Это называется символьным классом. Спецсимволы, написанные в [] ведут себя немного по-другому. Это я напишу.
    Пример:
     '/pat[aoe]rn/' 

    - под соответствие попадут только строки, содержащие patarn, patorn или patern.

  6. | - Или. Пример ниже.
  7. () - подмаска.
  8. ? - одно или ноль вхождений предшествующего символа или подмаски.
  9. * - любое количество вхождений предшествующего символа или подмаски. В том числе и ноль.
  10. + - одно или более вхождений.
    Пример:
    '/as+(es|du)?.*r/'

    - Буква а, потом одна или больше букв s, после этого сочетание es или du может быть один раз, а может м ни разу, потом любое количество любых символов и буква r.

    Здесь же скажу про еще одно значения символа ?. Метасимвол звездочка по умолчанию жадный (и другие тоже). Это значит, что в нашем примере вот этой части '.*r' будет соответствовать, например, подстрока

    asdrfsrsfdr

    Как видно, кроме встретившейся первой r (тогда ответом было бы "asdr") в нее попало еще две. Вот эту жадность можно выключить. Т.е. шаблон станет соответствовать только подстроке asdr. До первого r. Для этого надо до того места где необходимо отключить жадность поставить модификатор (?U). Вот еще одно применение символам ? и ().

  11. {a,b} - количество вхождений предшествующего символа или подмаски от а до б. Если б не указан, считается, что верхней границы нет. Например, * - то же самое, что {0,}. ? - то же, что {0,1}. {5,7} - 5,6 или 7 повторений.

Из материалов: http://www.php.su/lessons/?lesson_17

Comments

melisa's picture

Вопрос аналогичен этому
Не надо ли ставить "?" после квантификатора повторений, а не

до того места где необходимо отключить жадность

?
Что в предпоследнем абзаце обозначает "U"? Просто букву?

vedro-compota's picture

Не надо ли ставить "?" после квантификатора повторений, а не

до того места где необходимо отключить жадность

-- Допустим и тот и другой вариант -- оба они рассмотрены тут.

Что в предпоследнем абзаце обозначает "U"? Просто букву?

-- это спец. символ модификатора, в данном случае подразумевается синтаксис установки внутренних опций.

_____________
матфак вгу и остальная классика =)