什么是扩展正则表达式?

时间:2014-07-08 22:39:14

标签: regex perl

我正在攻读考试,其中一个主题是关于RegEx。有一个修饰符x,描述'使用扩展正则表达式',但它没有解释这意味着什么。我无法在谷歌上找到适合我学习材料背景的任何内容。

在测验中,其中一个问题询问了哪些修饰符允许在RegEx中使用注释,而正确的(?)答案是x

有人可以帮我理解这个吗?谢谢。

修改:我在x的上下文中表示[gix],,其中x被描述为'使用扩展正则表达式。'

4 个答案:

答案 0 :(得分:7)

perlretut中所述(只需搜索/x):

  像这样的长期正面表可能给你的朋友留下深刻印象,但很难解读。在这种复杂情况下,匹配的//x修饰符非常宝贵。它允许人们将几乎任意的空格和注释放入正则表达式而不影响它们的含义。使用它,我们可以重写我们的扩展' regexp更令人愉悦的形式

    /^
          [+-]?         # first, match an optional sign
          (             # then match integers or f.p. mantissas:
               \d+\.\d+  # mantissa of the form a.b
              |\d+\.     # mantissa of the form a.
              |\.\d+     # mantissa of the form .b
              |\d+       # integer of the form a
          )
          ([eE][+-]?\d+)?  # finally, optionally match an exponent
      $/x;

答案 1 :(得分:4)

perlre文档中所述:

  

/x告诉正则表达式解析器忽略大多数空格,这些空格既不是反斜杠也不是字符类。您可以使用它将正则表达式分解为(稍微)更易读的部分......

修饰符提高了可读性,并允许我们添加解释性注释。

 /^            # the beginning of the string
   (?:         # group, but do not capture:
       foo     #   match 'foo'
      |        #  OR
       bar     #   match 'bar'
   )           # end of grouping
  $            # the end of the string
 /x;

即使没有/x修饰符,您也可以附上注释。

/foo(?# match foo)/

答案 2 :(得分:2)

/ x忽略既没有反斜杠也没有在字符类中的空格。使你的正则表达式更具可读性

答案 3 :(得分:0)

你似乎在这里混淆了两个不同的概念。

Perl中匹配(/x)和替换(m//)运算符的s///选项告诉正则表达式解析忽略空格。这用于使您的正则表达式更具可读性。

Extended patterns是Perl正则表达式引擎的补充,因此它支持正则表达式工具通常不支持的东西(如前瞻和后瞻)。