Шаблоны регулярных выражений

js-regular-expressions-syntax[1]Каждое регулярное выражение должно состоять из: ограничителя шаблона, самого шаблона, и не обязательных модификаторов.

1. Ограничитель шаблона

“#” — ограничителm шаблона им может служить любой не алфавитно-цифровой символ, кроме обратного слеша “\”. Очень часто в качестве ограничителя используется “/”,”|”,”%”,”$” или как в моём случае “#”. Если в шаблоне нужно использовать символ который у нас выбран в качестве ограничителя перед ним добавляется обратный слеш “\” (пример: “#\##i”)

2. Шаблон

Шаблон это то что находится между ограничителей у нас это “<(h1|h2|h3)>(.*)”
в нашем шаблоне так же имеются под-шаблоны: “(h1|h2|h3)” который ищет совпадение с h1 или h2 или h3, и “(.*)” который ищет совпадение между заголовков
и также у нас есть обратная ссылка \\1 о которой будет рассказано в пункте 4

Давай рассмотрим синтаксис шаблонов, именно в нём и состоит вся мощь регулярных выражений:

| — Означает логическое или.
#а|о#
такой шаблон ищет “a”, если не найдет, будет искать “о”.
совпадет — “любитель пива” (нашлось ‘а’)
совпадет — “люблю пиво” (нашлось ‘о’)
не совпадет — “пиву нет!!”

ˆ — этот знак в шаблоне обозначает, чтобы в начале обязательно стояли следующие за ним символы.

#ˆп#

такой шаблон ищет “п” и найдет, если он стоит первым:
не совпадет — “водка непутинка” (нет ‘п’ в начале)
совпадет — “путинка водка” (’п’ в начале)

$ — этот знак в шаблоне обозначает , чтобы в конце обязательно стояли, предшествующие ему символы.

#т$#

такой шаблон ищет “т” и найдет, если он стоит последним:
не совпадет — “водка плохо” (нет ‘т’ в конце, нельзя)
совпадет — “пива нет” (’т’ в конце)

. — точка в шаблоне обозначает, что шаблон совпадет с любым символ строки, кроме [\n].

#.#

то есть, этот шаблон совпадет с любыми символами, кроме знака [\n]:
совпадет — “абв” (выведет только ‘а’ ‘б’ ‘в’)
совпадет — “а\nб\nв” (выведет только ‘а’ ‘б’ ‘в’, [\n] не выведет)

* — этот знак в шаблоне обозначает количество совпадений, это числитель ноль или более раз

#а*#

такой шаблон ищет “а” и найдет только в том случае, если “а” будет находиться в строке ноль или более раз. То есть, совпадет с любой строкой и вернет ее:
совпадет — “пива нет” (есть ‘а’)
совпадет — “спирт хорошо” (нет ‘а’, но все — равно совпадает)

+ — этот знак в шаблоне обозначает количество совпадений, это числитель 1 или более раз

#п+#

такой шаблон ищет “п” и найдет, если “п” будет находиться 1 или более раз.
То есть, если “п” нет, то совпадения не будет. Если будет хотя бы одна “п”, или много “п”, то будет совпадение:
совпадет — “пиво пьют” (есть ‘п’ один и более раз)
не совпадет — “водку жрут” (нет ‘п’)

? — этот знак в шаблоне обозначает количество совпадений, это числитель 0 или 1 раз

#п?#

такой шаблон ищет “п” и найдет только в том случае, если “п” будет находиться 0 или 1 раз. То есть, если “п” не будет больше одной:
не совпадет — “пиво пьют” (есть ‘п’, но больше 1 раза)
совпадет — “пива нет” (есть ‘п’ один раз)
совпадет — “водка есть” (нет ‘п’, но все — равно совпадет)

{ } — эти знаки в шаблоне обозначают сколько раз должно быть совпадение

? тоже самое, что и {0,1} — ноль или один раз
* тоже самое, что и {0, } — ноль или более раз
+ тоже самое, что и {1, } — один или более раз
То есть, {2,3} — должно быть два или три совпадения. Ставится после символа, который будем искать без пробелов и через запятую: {1,9} {0,35}, итд. Первая цифра обозначает минимум совпадений, последняя — максимум.

#пиво{2,3}# — ‘пиво’ должно быть два или три раза
#водка{1,2}#- ‘водка’ должно быть один или два раза

\ — обратный слеш в шаблоне обозначает подстановку.
#\.# — мы предварили точку обратным слешем и, теперь, наш шаблон будет искать точку, и совпадет только с ней в нашем тексте, а не со всеми символами, как было в последнем примере. То есть, обратный слеш служит для обозначения самих метасимволов, как обычных символов текста. Так же, все метасимволы надо предварять слешем для обозначения самих себя.

Подстановка метасимвола:
\\ \. \| \( \) \[ \] \{ \} \? \* \+ \ˆ \/ \# \!

Подстановка класса символов
\d — любой цифровой символ [0-9]
\D — любой НЕ цифровой символ [Ր-9]
\s — любой пробельный символ [\t\ \r\f\n]
\S — любой НЕ пробельный символ [ˆ\t\ \r\f\n]
\w — любой алфавитно-цифровой символ [a-zA-Z0-9_]
\W — любой НЕ алфавитно-цифровой символ [ˆa-zA-Z0-9]

Кроме этого, классы символов можно обозначать так:
[[:alnum:]] — все алфавитно-цифровые символы [a-zA-Z0-9]
[[:alpha:]] — все алфавитные символы [a-zA-Z]
[[:blank:]] — символ табуляции и пробел [\t ]
[[:cntrl:]] — все управляющие символы
[[:digit:]] — все десятичные цифры [0-9]
[[:graph:]] — все печатные символы, за исключением пробела
[[:lower:]] — все строчные буквы [a-z]
[[:upper:]] — все прописные буквы [A-Z]
[[:print:]] — все печатные символы
[[:punct:]] — все знаки препинания [\.,;:-]
[[:space:]] — все пустые символы
[[:xdigit:]] — все шестнадцатиричные цифры

Если вы поставите [ˆ[:alnum:]] — любой НЕ алфавитно-цифровой символ, то есть это полная противоположность [[:alnum:]]. То есть, любой класс вы можете инвертировать посредством ‘ˆ’.

Подстановка претензий
\b — на границе слова
\B — не на границе слова
\A — в начале строки
\Z — в конце строки
\z — в конце текста

3. Подшаблон

( ) — эти знаки в шаблоне обозначают ограничители подшаблона, которые можно создавать и в дальнейшем ссылаться на них. Синтаксис подшаблона тот же самый что и у самого шаблона

в нашем шаблоне два подшаблона: “(h1|h2|h3)” который ищет совпадение с h1 или h2 или h3, и “(.*)” который ищет совпадение между заголовков

4. Обратная ссылка

Это ссылка на подшаблон в нашем случае //1 мы обращаемся к первому подшаблону в самом шаблоне.То есть выражение “#<(h1|h2|h3)>(.*)#Ui” равно “#<(h1|h2|h3)>(.*)#Ui”

5. Модификаторы

Функционирование регулярных выражений можно видоизменить используя модификаторы их значение и использование описано ниже.

i — игнорировать регистр
#шаблон#i
будет искать шаблон, игнорируя регистр в тексте поиска.

s — метасимвол ‘.’ соответствует и символу [\n], то есть классу [\0-\xFF]
#шаблон#s
будет искать шаблон, где ‘.’ Игнорирует видит [\n], то есть метасимвол точка будет так же возвращать и перевод каретки на новую строку.

U — минимизировать числитель, то есть искать как можно меньше совпадений
#шаблон#U
будет искать шаблон, с как можно меньшим совпадением раз. Если мы ставили в шаблоне #a?# — действие этого модификатора примерно такое же, как и минимизатора ‘?’ в самом шаблоне.

m — претензии ‘ˆ’ и ‘$’ учитывают [\n]
#шаблон#m
если в шаблоне будут метасимволы ‘ˆ’ и ‘$’, то претензия ‘ˆ’ будет искать совпадение в начале строки, а претензия ‘$’ будет искать совпадение в конце строки.
#ˆпиво$#m
совапдение — “пиво\n” (в строке ‘пиво’)
нет совапдения — “пи\nво” (здесь ‘пиво’ в разных строках)

D — претензия ‘$’ не учитывает [\n]
#шаблон#D
если в шаблоне есть метасимвол ‘$’.
Претензия ‘$’ будет искать совпадение в фактическом конце текста, игнорируя переводы каретки на новую строку [\n].

A — привязать шаблон к началу текста
#шаблон#A
Будет искать шаблон только в фактическом начале теста.

x — разрешить комментарии: пробел и #
#шаблон#x
здесь в шаблоне разрешены пробел и #, как комментарии, поэтому пробел и # надо предварять слешем, если только они не обозначают комментарии.
/слово
#комментарий
ищу/x
будет искать ‘словоищу’. То есть, здесь игнорируются пробелы и все, что следует за знаком диез.

X — воспринимать неверную подстановку как ошибку.
#шаблон#X

S — предварительная оптимизация шаблона
#шаблон#S

e — используется в функции ‘preg_replace’ для ее активации
#шаблон#e

тоесть в нашем случае это Ui (ищем как можно меньше совпадений, игнорируя регистр)

Запись навигация

Top