我可以在我的代码中将Perl正则表达式分成多行吗?

时间:2012-07-25 14:17:55

标签: regex perl

我只是想知道我是否能够打破我在Perl代码中使用的长正则表达式,以便将其写入多行?我只是希望任何可能在完成后查看我的代码的人都能保持可读性和紧凑性。我正在寻找与Perl中的几行分解字符串的方式类似的东西。例如:

print "This is a string that is ". #1st line
      "very long, so it is on 2 lines!"; #2nd line
# prints = "This is a string that is very long, so it is on 2 lines!" 

我不知道如何使用正则表达式执行此操作,因为它不使用引号。如果我按回车键,我猜它会在我的正则表达式中添加一个新行字符,使其成为错误。我想做一些事情:

if($variable_1 = /abcde_abcde_abdcae_adafdf_      #1st regex line
                 abscd_casdf_asdfd_....asdfaf/){ #regex continued
    # do something
} # regex looking for pattern = abcde_abcde_abdcae_adafdf_abscd_casdf_asdfd_....asdfaf

3 个答案:

答案 0 :(得分:24)

使用Whitespace-Insensitive Modifier

perlre(1)手册页说:

  

“/ x”修饰符本身需要更多解释。它告诉了   正则表达式解析器忽略大多数空白   在一个角色类中也没有反击。你可以用它来分手   你的正则表达式(稍微)更易读的部分。

您可以使用它来创建多行表达式。例如:

/
  abcde_abcde_abdcae_adafdf_    # Have some comments, too. 
  abscd_casdf_asdfd_....asdfaf  # Here's your second line.
/x

文字空间

如果匹配将包含空格,则在使用/ x修饰符时,需要在正则表达式中将它们显式化。例如,/foo bar baz quux/x将不会像您期望的那样匹配以空格分隔的字符串。相反,您需要以下内容:

print "true\n" if
    /
        foo
        \s+  # You need explicit spaces...
        bar
        \s+  # because the modifier will...
        baz
        \s+  # otherwise ignore literal spaces.
        quux
    /x;

答案 1 :(得分:9)

是的,请参阅perlre手册页中的/x modifier

答案 2 :(得分:0)

使用+符号。这是一个例子:

push @steps, $steps[-1] +
        $radial_velocity * $elapsed_time +
        $orbital_velocity * ($phase + $phase_shift) -
        $DRAG_COEFF * $altitude;