代码之家  ›  专栏  ›  技术社区  ›  gMale

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

  •  3
  • gMale  · 技术社区  · 14 年前

    问题

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


    背景

    我看见了 this StackOverflow answer ,由johnkugelman发布,其中他展示了严肃的正则表达式技巧。

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

    /^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
    

    很明显 以及 不是匹配的字符。

    那么这一切意味着什么???

    提前感谢所有回复,

    2 回复  |  直到 7 年前
        1
  •  5
  •   Jani Hartikainen    14 年前

    周围的斜杠只是regex分隔符。您可以使用任何字符(afaik)来实现这一点-最常用的是/,我看到的其他一些常用的是#

    @whatever@i 本质上与 /whatever/i (i是不区分大小写匹配的修饰符)

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

        2
  •  1
  •   Niet the Dark Absol    11 年前

    从“相关”链接中找到的。

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

    我见过有人用 ~ , # @ ,偶数 ! 以避免使用正则表达式中的符号的方式对正则表达式进行定界。我个人觉得这很可笑。

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

    (^abc)i
    

    我用括号提醒自己在比赛中, $m[0] $m[1] .