perl regex / x开关

时间:2015-02-20 03:19:29

标签: regex perl

尝试匹配" JOB:水果342无法获得"

代码匹配:

$line =~ /^JOB: fruit (\d+) apples to get/

但是当我在

中添加/ x开关时
$line =~ /^JOB: fruit (\d+) apples to get/x

不匹配。

我查看/ x开关,它说它只是让你做评论所以我不知道为什么添加/ x阻止我的正则表达式匹配

2 个答案:

答案 0 :(得分:7)

/x修饰符告诉Perl忽略在正则表达式中没有转义的大多数空格。

例如,我们只关注apples to get。您可以将它与:

匹配
$line =~ /apples to get/

但如果你尝试:

$line =~ /apples to get/x
然后Perl会忽略这些空格。所以这就像尝试匹配applestoget

您可以在perlre中详细了解相关信息。他们有一个很好的例子,说明如何使用修饰符使代码更具可读性。

 # Delete (most) C comments.
$program =~ s {
        /\* # Match the opening delimiter.
        .*? # Match a minimal number of characters.
        \*/ # Match the closing delimiter.
} []gsx;

他们还提到了在使用#修饰符时如何再次匹配空格或/x

  

使用/ x表示如果你想要真正的空格或#字符   模式(在括号内的字符类之外,不受影响   通过/ x),然后你必须要逃避它们(使用反斜杠或   \ Q ... \ E)或使用八进制,十六进制或\ N {}转义对它们进行编码。

答案 1 :(得分:3)

允许评论的一部分也忽略了文字空格。使用\s[ ]表示您希望匹配的空格。

例如

$line =~ /^                      #beginning of string
           JOB:[ ]fruit[ ]       #some literal text 
           (\d+)                 #capture digits to $1
           [ ]apples[ ]to[ ]get  #more literal text
         /x

在评论开头之前注意所有这些空格。如果他们数数就会发臭......