Примечание: Мы постараемся сложную тему по регулярным выражениям, сделать понятнее для большинства. Много было прочитано статей и решено задач, прежде чем начать писать эту статью.
Что такое Регулярные выражения, можно изучить на Википедии https://ru.wikipedia.org/wiki/Регулярные_выражения
Шаблоны
[abc]
Соответствует символу a, b или c
Пример:
Дана строка a bb vvvv www ccc
, дан шаблон /[abc]+/
, необходимо найти все символы указанные в шаблоне
$string = 'a bb vvvv www ccc';
preg_match_all("/[abc]+/", $string, $matches);
var_dump($matches);
array (size=3)
0 => string 'a' (length=1)
1 => string 'bb' (length=2)
2 => string 'ccc' (length=3)
[^abc]
Соответствует любому символу, кроме a, b или c
Пример:
Дана строка Anything but abc.
, дан шаблон /[^abc]+/
, необходимо найти все символы, кроме указанных в шаблоне
$string = 'Anything but abc.';
preg_match_all("/[^abc]+/", $string, $matches);
var_dump($matches);
array (size=3)
0 => string 'Anything ' (length=9)
1 => string 'ut ' (length=3)
2 => string '.' (length=1)
[a-z]
Соответствует любым символам от a до z, включая a и z.
Пример:
Дана строка Only a-z
, дан шаблон /[a-z]+/
, необходимо найти все символы, от a до z, включая a и z, регистрозависиый шаблон
$string = 'Only a-z';
preg_match_all("/[a-z]+/", $string, $matches);
var_dump($matches);
array (size=3)
0 => string 'nly' (length=3)
1 => string 'a' (length=1)
2 => string 'z' (length=1)
---------------------------------------------
### [^a-z]
Соответствует любым символам, кроме символов в диапазоне от a до z.
Пример:
Дана строка Anything but a-z.
, дан шаблон /[^a-z]+/
, необходимо найти все символы, кроме символов в диапазоне от a до z, регистрозависимый шаблон
$string = 'Anything but a-z.';
preg_match_all("/[^a-z]+/", $string, $matches);
var_dump($matches);
array (size=5)
0 => string 'A' (length=1)
1 => string ' ' (length=1)
2 => string ' ' (length=1)
3 => string '-' (length=1)
4 => string '.' (length=1)
[a-zA-Z]
Соответствует любым символам от a до z или от A до Z. Вы можете комбинировать столько, сколько захотите.
Пример:
Дана строка abc123DEF
, дан шаблон /[a-zA-Z]+/
, необходимо найти все символы от a до z или от A до Z. Регистрозависимый шаблон
$string = 'abc123DEF';
preg_match_all("/[a-zA-Z]+/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'abc' (length=3)
1 => string 'DEF' (length=3)
.
Соответствует любому символу, кроме новой строки (или включая символы конца строки с флагом /s)
Пример:
Дана строка a b c
, дан шаблон /.+/
, необходимо найти любой символ, кроме новой строки.
$string = 'a b c';
preg_match_all("/.+/", $string, $matches);
var_dump($matches);
array (size=1)
0 => string 'a b c' (length=5)
a|b
Соответствует либо тому, что стоит перед | или что стоит после него - в данном случае a
илиb
.
Вы можете использовать альтернативы локально как часть группы захвата / не захвата. Например:
/I love (?:cats|dogs) but hate snakes/
Пример:
Дана строка a or b, pick one!
, дан шаблон /a|b/
, необходимо найти символ или a или b
$string = 'a or b, pick one!';
preg_match_all("/a|b/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
\s
Соответствует любому символу пробела, табуляции или новой строки.
Пример:
Дана строка any whitespace character
, дан шаблон /\s/
, необходимо найти символ пробела, табуляции или новой строки.
$string = 'any whitespace character';
preg_match_all("/\s/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string ' ' (length=1)
1 => string ' ' (length=1)
\S
Соответствует чему-либо, кроме пробела, табуляции или новой строки.
Пример:
Дана строка any non-whitespace
, дан шаблон /\S+/
, необходимо найти все символы, кроме символов пробела, табуляции или новой строки.
$string = 'any non-whitespace';
preg_match_all("/\S+/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'any' (length=3)
1 => string 'non-whitespace' (length=14)
\d
Соответствует любой десятичной цифре. Эквивалентно [0-9].
Пример:
Дана строка one: 1, two: 2
, дан шаблон /\d/
, необходимо найти все цифры в строке.
$string = 'one: 1, two: 2';
preg_match_all("/\d/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string '1' (length=1)
1 => string '2' (length=1)
\D
Соответствует чему-либо, кроме десятичных цифр.
Пример:
Дана строка one: 1, two: 2
, дан шаблон /\D+/
, необходимо найти все символы, кроме цифр.
$string = 'one: 1, two: 2';
preg_match_all("/\D+/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'one: ' (length=5)
1 => string ', two: ' (length=7)
\w
Соответствует любой букве, цифре или знаку подчеркивания. Эквивалентно [a-zA-Z0-9_].
Пример:
Дана строка any word character
, дан шаблон /\w+/
, необходимо найти любую букву, цифру или знак подчеркивания.
$string = 'any word character';
preg_match_all("/\w+/", $string, $matches);
var_dump($matches);
array (size=3)
0 => string 'any' (length=3)
1 => string 'word' (length=4)
2 => string 'character' (length=9)
\W
Соответствует чему-либо, кроме буквы, цифры или символа подчеркивания. Эквивалент [^ a-zA-Z0-9_]
Пример:
Дана строка not.a@word%character
, дан шаблон /\W+/
, необходимо найти любой символ, кроме букв, цифр или символа подчеркивания.
$string = 'not.a@word%character';
preg_match_all("/\W+/", $string, $matches);
var_dump($matches);
array (size=3)
0 => string '.' (length=1)
1 => string '@' (length=1)
2 => string '%' (length=1)
(?:...)
Группа без захвата позволяет вам применять квантификаторы к части вашего регулярного выражения, но не захватывает / не назначает идентификатор.
Например, повторить 1–3 цифры и точку 3 раза можно так:
/(?:\d{1,3}\.){3}\d{1,3}/
Пример:
Дана строка match this match that
, дан шаблон /match this (?:match that)/
, необходимо найти match this и одно повторение match that
$string = 'match this match that';
preg_match_all("/match this (?:match that)/", $string, $matches);
var_dump($matches);
array (size=1)
0 => string 'match this match that' (length=21)
(...)
Изолирует часть полного совпадения, на которую позже будет ссылаться идентификатор в регулярном выражении или в массиве совпадений. Идентификаторы начинаются с 1.
Распространенное заблуждение состоит в том, что повторение группы захвата будет создавать отдельные идентификаторы для каждого совпадения. Если эта функциональность необходима, вместо этого следует полагаться на глобальный флаг (/g). Например:
/each (word)/g
Пример:
$string = 'match and capture capture ?';
preg_match_all("/match and (capture )+/", $string, $matches);
var_dump($matches);
array (size=2)
0 =>
array (size=1)
0 => string 'match and capture capture ' (length=26)
1 =>
array (size=1)
0 => string 'capture ' (length=8)
a?
Соответствует символу a
или ничего.
Пример:
Дана строка ba b a
, дан шаблон /ba?/
, необходимо найти или ba или b
$string = 'ba b a';
preg_match_all("/ba?/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'ba' (length=2)
1 => string 'b' (length=1)
a*
Соответствует нулю или нескольким последовательным символам a
.
Пример:
Дана строка a ba baa aaa ba b
, дан шаблон /ba*/
, необходимо найти или ba или baa или b
$string = 'a ba baa aaa ba b';
preg_match_all("/ba*/", $string, $matches);
var_dump($matches);
array (size=4)
0 => string 'ba' (length=2)
1 => string 'baa' (length=3)
2 => string 'ba' (length=2)
3 => string 'b' (length=1)
a+
Соответствует одному или нескольким последовательным символам a
.
Пример:
Дана строка a aa aaa aaaa bab baab
, дан шаблон /a+/
, необходимо найти все последовательности символа a
$string = 'a aa aaa aaaa bab baab';
preg_match_all("/a+/", $string, $matches);
var_dump($matches);
array (size=6)
0 => string 'a' (length=1)
1 => string 'aa' (length=2)
2 => string 'aaa' (length=3)
3 => string 'aaaa' (length=4)
4 => string 'a' (length=1)
5 => string 'aa' (length=2)
a{3}
Соответствует ровно 3 последовательным символам a
.
Пример:
Дана строка a aa aaa aaaa
, дан шаблон /a{3}/
, необходимо найти все символы a, которые повторяются три раза
$string = 'a aa aaa aaaa';
preg_match_all("/a{3}/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'aaa' (length=3)
1 => string 'aaa' (length=3)
a{3,}
Соответствует как минимум 3 последовательным символам a
.
Пример:
Дана строка a aa aaa aaaa aaaaaa
, дан шаблон /a{3,}/
, необходимо найти все символы a, которые повторяются минимум три раза
$string = 'a aa aaa aaaa aaaaaa';
preg_match_all("/a{3,}/", $string, $matches);
var_dump($matches);
array (size=3)
0 => string 'aaa' (length=3)
1 => string 'aaaa' (length=4)
2 => string 'aaaaaa' (length=6)
a{3,6}
Соответствует от 3 до 6 (включительно) последовательных символов «a».
Пример:
Дана строка a aa aaa aaaa aaaaaaaaaa
, дан шаблон /a{3,6}/
, необходимо найти все символы a, которые повторяются минимум три раза и максимум шесть раз.
$string = 'a aa aaa aaaa aaaaaaaaaa';
preg_match_all("/a{3,6}/", $string, $matches);
var_dump($matches);
array (size=4)
0 => string 'aaa' (length=3)
1 => string 'aaaa' (length=4)
2 => string 'aaaaaa' (length=6)
3 => string 'aaaa' (length=4)
^
Соответствует началу строки без использования символов. Если используется многострочный режим /m, он также будет соответствовать сразу после символа новой строки.
Пример:
Дана строка start of string
, дан шаблон /^\w+/
, необходимо найти первое слово в строке.
$string = 'start of string';
preg_match_all("/^\w+/", $string, $matches);
var_dump($matches);
array (size=1)
0 => string 'start' (length=5)
$
Соответствует концу строки без использования каких-либо символов. Если используется многострочный режим, он также будет соответствовать непосредственно перед символом новой строки.
Пример:
Дана строка end of string
, дан шаблон /\w+$/
, необходимо найти последнее слово в строке.
$string = 'end of string';
preg_match_all("/\w+$/", $string, $matches);
var_dump($matches);
array (size=1)
0 => string 'string' (length=6)
\b
Соответствует, без использования каких-либо символов, непосредственно между символом, совпадающим с \w, и символом, не совпадающим с \w (в любом порядке). Его нельзя использовать для отделения не слов от слов.
Пример:
$string = 'word boundaries are odd';
preg_match_all("/d\b/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'd' (length=1)
1 => string 'd' (length=1)
\B
Соответствует без использования каких-либо символов позиции между двумя символами, совпадающими с \w.
Пример:
$string = 'regex is really cool';
preg_match_all("/r\B/", $string, $matches);
var_dump($matches);
array (size=2)
0 => string 'r' (length=1)
1 => string 'r' (length=1)