Я видел регулярное выражение '!\d!'
внутри функции PHP preg_match
. Что это за черт?
Регулярное выражение с восклицательными знаками с обеих сторон ('!\D!')
Ответ 1
При использовании функций PCRE требуется, чтобы шаблон был заключен в разделители. Разделителем может быть любой небуквенный символ, не обратный слэш, символ без пробелов.
В этом случае он просто использует !
как разделитель. Часто он используется, если вы хотите использовать обычный разделитель внутри самого регулярного выражения без необходимости его избегать. В этом случае не обязательно, так как остальное регулярное выражение просто \d
, но оно очень удобно для таких вещей, как проверка того, что путь содержит более трех уровней каталога. Вы можете использовать любой из:
/\/.*\/.*\/.*\/ blah blah blah /
или
!/.*/.*/.*/ blah blah blah !
Теперь они не были протестированы полностью и могут работать не так, как было объявлено, но вы должны получить общую идею, требующую минимального экранирования.
Другой пример (со страницы, связанной с выше) - проверка, начинается ли строка с маркера http://
. Любой из этих двух:
/^http:\/\//
!^http://!
было бы достаточно, но второе легче понять.
Ответ 2
!
используется как разделитель, \d
соответствует одной цифре.
Это то же самое, что /[0-9]/