Разделители

При использовании любой PCRE функции необходимо заключать шаблон в разделители. Разделителем может быть любой символ не являющийся буквой, цифрой, обратной косой чертой или каким-либо пробельным символом.

Часто используемыми разделителями являются косые черты (/), знаки решетки (#) и тильды (~). Ниже представлены примеры шаблонов с корректными разделителями.

/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%

Также можно использовать разделитель в виде скобок, где стартовый и завершающий разделители являются соответственно открывающей и закрывающей скобками. (), {}, [] и <> являются допустимыми парами разделителей.

(this [is] a (pattern))
{this [is] a (pattern)}
[this [is] a (pattern)]
<this [is] a (pattern)>
Разделители в виде скобок не нужно экранировать, если они также используются как метасимволы в шаблоне, но как и с другими разделителями их нужно экранировать, если они используются непосредственно как символы.

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

/http:\/\//
#http://#
Функция preg_quote() может быть использована для экранирования строки, используемой в шаблоне, а ее необязательный второй параметр позволяет указать используемый разделитель.

После закрывающего разделителями можно использовать модификаторы шаблонов. Ниже следуюет пример регистро-независимого поиска:

#[a-z]#i

Коментарии

Автор:
Note that bracket style opening and closing delimiters aren't a 100% problem-free solution, as they need to be escaped when they aren't in matching pairs within the expression. That mismatch can happen when they appear inside character classes [...], as most meta-characters lose their special meaning. Consider these examples:

<?php
  preg_match
('{[{]}'''); // Warning: preg_match(): No ending matching delimiter '}'
 
preg_match('{[}]}'''); // Warning: preg_match(): Unknown modifier ']'
 
preg_match('{[}{]}'''); // Warning: preg_match(): Unknown modifier ']'
?>

Escaping them solves it:

<?php
  preg_match
('{[\{]}'''); // OK
 
preg_match('{[}]}'''); // OK
 
preg_match('{[\}\{]}'''); // OK
?>
2015-02-26 02:46:20
http://php5.kiev.ua/manual/ru/regexp.reference.delimiters.html
Автор:
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'

preg_match('{[\}]}', ''); // OK
2015-08-26 16:07:30
http://php5.kiev.ua/manual/ru/regexp.reference.delimiters.html
Автор:
Note that angle brackets `<>` shouldn't be used as delimiters whenever you will have to invoke advanced clusters like atomic groups or lookbehinds because their including angle bracket doesn't come in pair and escaping doesn't help either.
2018-12-12 10:56:58
http://php5.kiev.ua/manual/ru/regexp.reference.delimiters.html

    Поддержать сайт на родительском проекте КГБ