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

Rog*_*ger 8 regex perl

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

$r->{DISPLAY} =~ s/\Device//s;
Run Code Online (Sandbox Code Playgroud)

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

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

请有人澄清一下......

sep*_*p2k 19

\D是否定的\d,即它匹配任何不是数字的东西.

  • @Roger如果您喜欢sepp2k的答案,请单击左侧的复选标记,表示此答案已回答您的问题. (2认同)

TLP*_*TLP 11

在那个正则表达式,\D看起来像一个错字.它同时适用于dD,不仅是因为它不是一个数字(0-9)的任意字符相匹配.

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

s/(d|D)evice// # one way
s/[dD]evice//  # another way
Run Code Online (Sandbox Code Playgroud)

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

s   Treat string as single line. (Make . match a newline)
Run Code Online (Sandbox Code Playgroud)

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