Php 当正则表达式被@符号包围时意味着什么?

Php 当正则表达式被@符号包围时意味着什么?,php,regex,Php,Regex,问题 当正则表达式被@符号包围时意味着什么?这是否意味着与被斜线包围有所不同?当@x或@i结束时呢?现在我想起来了,周围的斜线是什么意思 背景 我看到了约翰·库格曼(John Kugelman)的帖子,他在其中展示了严肃的正则表达式技巧 现在,我习惯于看到正则表达式被斜杠包围,如 /^abc/ 但他使用了一个被@符号包围的正则表达式: '@ ^% (.{2}) # State, 2 chars ([^^]{0,12}.)

问题

当正则表达式被@符号包围时意味着什么?这是否意味着与被斜线包围有所不同?当@x或@i结束时呢?现在我想起来了,周围的斜线是什么意思


背景

我看到了约翰·库格曼(John Kugelman)的帖子,他在其中展示了严肃的正则表达式技巧

现在,我习惯于看到正则表达式被斜杠包围,如

/^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
@^abc@i
在尝试用谷歌搜索这意味着什么的过程中(这对谷歌来说是个棘手的问题!),我还看到了以下格式:

@^abc@x
@^abc@i
很明显,xi是不匹配的字符

那么这一切意味着什么呢

提前感谢所有回复


-gMale

周围的斜杠只是正则表达式分隔符。您可以使用任何字符(afaik)来实现这一点-最常用的是/,我看到的另一个常用字符是#

换句话说,
@whatever@i
基本上与
/whatever/i
相同(i是不区分大小写匹配的修饰符)

如果正则表达式包含该字符,则可能需要使用/以外的内容。您可以避免转义它,这类似于将“”用于字符串而不是“”。

从“相关”链接中找到它

分隔符可以是非字母数字、空格或反斜杠字符的任何字符

/
是最常用的分隔符,因为它与regex文本密切相关,例如在JavaScript中,它们是唯一有效的分隔符。但是,可以使用任何符号

我见过人们使用
~
#
@
,甚至
以避免使用正则表达式中的符号的方式对其正则表达式进行分隔。我个人觉得这很可笑

一个鲜为人知的事实是,在PHP中可以使用一对匹配的括号来分隔正则表达式。这有一个巨大的优势,即在结束分隔符和模式中显示的符号之间有明显的区别,因此不需要任何转义。我个人的偏好是:

(^abc)i

通过使用括号,我提醒自己,在匹配中,
$m[0]
始终是完全匹配,子模式从
$m[1]
开始回答得很好!如果i是不区分大小写搜索的修饰符,那么x a修饰符的作用是什么?你知道有哪个地方会详细解释这个方面(修饰语)吗?我在谷歌上搜索的所有正则表达式只涵盖了基础知识,我对基础知识了如指掌。
x
修饰符调用自由间距模式:@Delan:谢谢,这是一个非常棒的高级正则表达式信息源,适用于所有语言!我把它作为一个主书签添加进来。阅读PHP文档中关于分隔符的内容:这应该让一切都清楚了。谢谢你的链接。这让我找到了另一个很好的链接,它解释了所有的模式修改器。我认为所有这些东西不仅仅适用于PHP。我对你的评论很感兴趣。你认为不太传统的分隔符很可笑吗?我感到,如果不在混合中添加额外的
\/
标记,正则表达式在最好的时候很难读取。正如你所指出的,我可以看到避免使用其他语言的好处,即遵从其他语言,但是你个人喜欢使用括号也否定了这种遵从性?但是对于括号模式+1,我想我将开始使用它。虽然我想知道它是否很少使用,因此比您强调的其他更为普遍理解的替代品更为“晦涩”?好吧,一个普遍的用法必须从某个地方开始,对吗?;)你先在这里听到的!哈哈。谢谢你的投票!:-)运动已经开始了!革命万岁!如果备用分隔符有助于避免转义斜杠,那么使用括号作为分隔符不需要转义正则表达式中的括号吗?我在正则表达式中使用括号的次数远远多于斜杠,这就是它的美妙之处。括号成对出现,因此不需要在模式中转义它们。