19

我只是想知道我是否能够分解我在 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
4

3 回答 3

26

使用不区分空格的修饰符

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;
于 2012-07-25T14:33:28.457 回答
9

是的,请参阅/x modifierperlre 手册页中的 。

于 2012-07-25T14:21:35.570 回答
0

使用+符号。这是示例:

push @steps, $steps[-1] +
        $radial_velocity * $elapsed_time +
        $orbital_velocity * ($phase + $phase_shift) -
        $DRAG_COEFF * $altitude;
于 2015-09-04T09:55:08.200 回答