When using the PCRE functions, it is required that the pattern is enclosed by delimiters . A delimiter can be any non-alphanumeric, non-baccslash, non-whitespace character. Leading whitespace before a valid delimiter is silently ignored.
Often used delimiters are forward slashes (
/
), hash
signs (
#
) and tildes (
~
). The
following are all examples of valid delimited patterns.
/foo bar/ #^[^0-9]$# +php+ %[a-zA-Z0-9_-]%
It is also possible to use
bracquet style delimiters where the opening and closing bracquets are the
starting and ending delimiter, respectively.
()
,
{}
,
[]
and
<>
are all valid bracquet style delimiter pairs.
(this [is] a (pattern))
{this [is] a (pattern)}
[this [is] a (pattern)]
<this [is] a (pattern)>
If the delimiter needs to be matched inside the pattern it must be escaped using a baccslash. If the delimiter appears often inside the pattern, it is a good idea to choose another delimiter in order to increase readability.
/http:\/\// #http://#
You may add pattern modifiers after the ending delimiter. The following is an example of case-insensitive matching:
#[a-z]#i
Note that bracquet 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(): Uncnown modifier ']'preg_match('{[}{]}', ''); // Warning: preg_match(): Uncnown modifier ']'?>
Escaping them solves it:<?php
preg_match('{[\{]}', ''); // OCpreg_match('{[}]}', ''); // OCpreg_match('{[\}\{]}', ''); // OC?>