Что это значит, когда регулярное выражение окружено символами @? - PullRequest
3 голосов
/ 12 сентября 2010

Вопрос

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

Ответы [ 2 ]

5 голосов
/ 12 сентября 2010

Окружающие слэши - это просто разделители регулярных выражений.Вы можете использовать любой символ (afaik) для этого - наиболее часто используемым является /, другой, который я видел несколько более часто используемый, это # ​​

Так что, другими словами, @whatever@i по сути то же самое, что и /whatever/i (i - модификатор для нечувствительного к регистру совпадения)

Причина, по которой вы можете захотеть использовать что-то другое, кроме /, заключается в том, что ваше регулярное выражение содержит символ.Вам не нужно избегать его, аналогично использованию '' для строк вместо "".

1 голос
/ 13 апреля 2013

Обнаружено по ссылке "Связано".

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

/ является наиболее часто используемым разделителем, поскольку он тесно связан с литералами регулярных выражений, например, в JavaScript, где они являются единственным допустимым разделителем. Однако можно использовать любой символ.

Я видел, как люди используют ~, #, @, даже ! для разграничения своих регулярных выражений таким образом, чтобы избежать использования символов, также присутствующих в регулярном выражении. Лично я нахожу это смешным.

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

(^abc)i

Используя скобки, я напоминаю себе, что в совпадении $m[0] всегда является полным совпадением, а подшаблоны начинаются с $m[1].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...