Per在Perl正则表达式中做了什么

时间:2011-06-20 12:13:20

标签: regex perl

在我维护的一些代码中,我找到了表达式:

$r->{DISPLAY} =~ s/\Device//s;

令我惊讶的是它与设备和设备匹配!

我没有在文档中提到\ D,只有\ d。

有人可以澄清......

3 个答案:

答案 0 :(得分:19)

\D是对\d的否定,即它匹配任何不是数字的内容。

答案 1 :(得分:11)

在那个正则表达式中,\D看起来像是一个错字。它适用于dD,只是因为它匹配任何不是数字的字符(0-9)。

更合适的正则表达式(如果意图匹配“device”或“Device”)是:

s/(d|D)evice// # one way
s/[dD]evice//  # another way

s选项也有点奇怪。来自perldoc perlop

s   Treat string as single line. (Make . match a newline)

并且在该行中没有这样的匹配。

答案 2 :(得分:2)

您已经有了答案,但是perldoc perlrecharclass中有关于它的文档。请参阅有关Backslash sequences

的信息

perldoc perlrequick使用字符类下的常规perldoc perlretut中也提到了它。然而,在这两个部分中,它被埋没了。