Оператор Тильды в регулярных выражениях
Я хочу знать, что означает оператор тильды в регулярных выражениях.
У меня есть это утверждение:
if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
$warnings[] = 'ISBN should be 10 digits';
}
Я нашел этот документ, объясняющий, что означает тильда: ~
Там сказано, что =~
- это оператор perl, который означает, что эта переменная выполняется против этого регулярного выражения.
Но почему мое регулярное выражение содержит два оператора тильды?
2 answers
В данном случае он просто используется в качестве разделителя.
Как правило, в PHP первый и последний символы регулярного выражения являются "разделителями" для обозначения начальной и конечной позиции соответствующей части (в случае, если вы хотите добавить модификаторы в конце, например, ungreedy и т. Д.)
Как правило, PHP обрабатывает это по первому символу в строке, которая подразумевается как регулярное выражение, сопоставляя второе его появление в качестве второго разделителя. Это полезно там, где у вас есть появление обычного разделителя в тексте (например, появление /
в тексте) - это означает, что вам не нужно делать неудобные вещи.
Соответствие для "//
" с разделителем, установленным на "/
"
/\/\//
Соответствие для "//
" с разделителем "#
"
#//#
В данном случае это ничего не значит. Это просто разграничивает начало и конец вашего шаблона. В PCRE (Регулярные выражения, совместимые с Perl), которые вы используете с preg_* в PHP, шаблон вводится вместе с параметрами выражения, например:
preg_match("/pattern/opt", ...);
Однако использование "/" в качестве разделителя в данном случае произвольно - хотя прямая косая черта популярна, ее можно заменить чем угодно. В вашем случае это тильда.