Что это означает, когда регулярное выражение окружено символами @?

Вопрос

Что это означает, когда регулярное выражение окружено символами @? Значит ли это что-то другое, чем окружающее косые черты? Как насчет того, когда @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] .