Подтвердить что ты не робот

Оператор Тильды в регулярных выражениях

Я хочу знать, что означает оператор тильды в регулярных выражениях.

У меня есть это утверждение:

if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
    $warnings[] = 'ISBN should be 10 digits';
}

Я нашел этот документ, объясняющий, что означает тильда: ~

Он сказал, что =~ является perl-оператором, который означает запустить эту переменную против этого регулярного выражения.

Но почему мое регулярное выражение содержит два оператора тильды?

4b9b3361

Ответ 1

В этом случае он просто используется как разделитель.

Как правило, в PHP первые и последние символы регулярного выражения являются "разделителями", чтобы отметить начальную и конечную позицию соответствующей части (в случае, если вы хотите добавить модификаторы в конце, например, неровные и т.д.)

Как правило, PHP работает с первым символом в строке, который подразумевается как регулярное выражение, соответствующее второму его вступлению в качестве второго разделителя. Это полезно, когда в тексте присутствует нормальный разделитель (например, вхождения текста / в тексте) - это означает, что вам не нужно делать неудобные вещи.

Соответствие для "//" с разделителем, установленным на "/"

/\/\//

Соответствие для "//" с разделителем "#"

#//#

Ответ 2

В этом случае это ничего не значит. Это просто ограничивает начало и конец вашего шаблона. В PCRE (регулярные выражения Perl Compatible Regular Expressions), которые вы используете с preg_ * в PHP, шаблон вводится рядом с параметрами выражения, например:

preg_match("/pattern/opt", ...);

Однако использование "/" в качестве разделителя в этом случае произвольно - хотя популярность слэша популярна, его можно заменить чем угодно. В вашем случае это тильда.