Оператор тильды в регулярных выражениях - PullRequest
49 голосов
/ 02 июня 2009

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

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

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

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

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

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

Ответы [ 2 ]

57 голосов
/ 02 июня 2009

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

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

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

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

/\/\//

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

#//#

7 голосов
/ 02 июня 2009

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

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

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

...