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


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

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

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

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

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

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

Author: Gumbo, 2009-06-02

2 answers

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

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

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

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

/\/\//

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

#//#

 56
Author: Mez, 2015-12-07 12:57:19

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

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

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

 6
Author: Nick, 2009-06-02 06:18:05