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