尝试匹配" JOB:水果342无法获得"
代码匹配:
$line =~ /^JOB: fruit (\d+) apples to get/
但是当我在
中添加/ x开关时$line =~ /^JOB: fruit (\d+) apples to get/x
不匹配。
我查看/ x开关,它说它只是让你做评论所以我不知道为什么添加/ x阻止我的正则表达式匹配
答案 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
在评论开头之前注意所有这些空格。如果他们数数就会发臭......