2009-06-02 4 views
44

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

У меня это заявление:

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

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

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

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

ответ

52

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

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

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

Matching для "//" с ограничителем установлен в положение "/"

/\/\//

Matching для "//" с ограничителем "#"

#//#

+1

ic, Я привык к/разделителю, поэтому я немного смутился с ~ разделителем. Спасибо за разъяснения. –

+0

Это относится только к PCRE http://docs.php.net/manual/en/book.pcre.php, а не POSIX ERE http://docs.php.net/manual/en/book.regex.php – Gumbo

6

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

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

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

+0

О, ладно .. Я получил регулярное выражение из книги. Они не объяснили, что это значит. Так было немного смущено. Я просто пытался прояснить ситуацию, потому что я в замешательстве. Благодаря! –

+0

'/' популярен, потому что это стандартный разделитель для регулярных выражений perl, что означает preg;) –

 Смежные вопросы

  • Нет связанных вопросов^_^