Вопрос
Что это означает, когда регулярное выражение окружено символами @? Значит ли это что-то другое, чем окружающее косые черты? Как насчет того, когда @x или @i находятся на конце? Теперь, когда я думаю об этом, что означают окружающие косые черты?
Задний план
Я видел этот ответ StackOverflow , отправленный Джоном Кугельманом, в котором он отображает серьезные навыки Regex.
Теперь я привык видеть регулярные выражения, окруженные косой чертой, как в
/^abc/
Но он использовал регулярное выражение, окруженное символами @:
'@ ^% (.{2}) # State, 2 chars ([^^]{0,12}.) # City, 13 chars, delimited by ^ ([^^]{0,34}.) # Name, 35 chars, delimited by ^ ([^^]{0,28}.) # Address, 29 chars, delimited by ^ \?$ @x'
Фактически, это похоже на формат:
@^abc@x
В процессе попытки Google, что это значит (это сложный вопрос для Google!), Я также видел формат:
@^abc@i
Понятно, что x и i не соответствуют символам.
Так что это значит?
Спасибо заранее за любые ответы,
-gMale
Окружающие косые черты – это просто разделители регулярных выражений. Вы можете использовать любой символ (afaik), чтобы сделать это – наиболее часто используемым является /, другой, который я видел, который часто используется, является #
Другими словами, @whatever@i
, @whatever@i
по существу совпадает с /whatever/i
(i является модификатором для нечувствительного к регистру совпадения)
Причина, по которой вы, возможно, захотите использовать что-то еще, чем /, – это если ваше регулярное выражение содержит символ. Вы избегаете этого избежать, подобно использованию «для строк вместо».
Обнаружено это по ссылке «Связанный».
Разделителем может быть любой символ, который не является буквенно-цифровым, пробельным или символом обратной косой черты.
/
является наиболее часто используемым разделителем, поскольку он тесно связан с литералами регулярных выражений, например, в JavaScript, где они являются единственным действительным разделителем. Однако любой символ может использоваться.
Я видел, как люди использовали ~
, #
, @
, даже !
чтобы разграничить их регулярные выражения таким образом, чтобы избежать использования символов, которые также находятся в регулярном выражении. Лично я считаю это смешным.
Менее известный факт заключается в том, что вы можете использовать совпадающую пару скобок для разграничения регулярного выражения в PHP. Это имеет огромное преимущество в том, что имеет очевидное различие между закрывающим разделителем и символом, отображающимся в шаблоне, и поэтому не требует никакого экранирования. Мои личные предпочтения таковы:
(^abc)i
Используя круглые скобки, я напоминаю себе, что в матче $m[0]
всегда является полным совпадением, а подшаблоны начинаются с $m[1]
.