2013-09-24 5 views
1

В следующем коде PHP (не мой):Что такое двоеточие для шаблона preg_match?

$has_trailing_slash = preg_match(':/$:', $string); 

какова цель двоеточия? Если я удалю их, тогда вызов preg_match будет жаловаться, если в строке нет конечной косой черты. С двоеточиями preg_match не жалуется, если нет косой черты. Таким образом, очевидно, что двоеточия - это какой-то условный или необязательный индикатор, но разве это где-нибудь зарегистрировано? Я не могу найти одно слово документации об использовании двоеточий таким образом с preg_match или регулярным выражением вообще.

+1

См. [Doc. –

ответ

3

Двойники здесь используются как разделители.

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

Это особенно важно, чтобы движок регулярных выражений может различать между действительным регулярным выражением и флагами (если таковой имеется), которые будут использоваться (например, i (для случая нечувствительны соответствия), s (чтобы сделать матч точки новой строки), u (для обеспечения соответствия символов Юникода) и т. д.)

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

В противном случае, вы можете изменить сам и это сказал разделитель, вы можете использовать разделитель, такой как # или ! или | или ~ или {} и так далее, до тех пор, это не алфавитно-цифровой или обратной косой черты.

Это означает, что вы можете использовать:

preg_match(':/$:', $string); 
preg_match('"/$"', $string); 
preg_match('@/[email protected]', $string); 
preg_match('{/$}', $string); 

Но если вы используете /, вы будете иметь, чтобы избежать каких-либо / в регулярном выражении, как так:

preg_match('/\/$/', $string); # Either use a backslash 
preg_match('/[/]$/', $string); # Or wrap it around square brackets 

или даже что-то, как странно, как это:

preg_match('\'/$\'', $string); 

Использование этого, скорее всего, путают люди, читающие ваш код и регулярное выражение, могут считаться достаточно запутанными!

Заключение У вас есть широкий выбор разделителей на выбор, но предпочтительнее, если вы последовательны и старайтесь не вводить ваш код в заблуждение.

3

Я думаю, что это разделители. Замены для /, так как в вашем шаблоне регулярного выражения есть /. Таким образом, использование / потребует его устранения. Чтобы избежать экранирования, вы можете использовать другой разделитель.

Таким образом, даже это действительно - #/$#, !/$!, ~/$~ ...

0

: являются разделители ... php является гибким, вы можете использовать несколько символов, чтобы стоять в качестве разделителей, чтобы избежать побега.

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