在我维护的某些代码中,我发现了这个表达式:
令我惊讶的是它同时匹配device和Device!
我在文档中没有发现\D的提及,只有\d。
可以有人澄清一下吗...
$r->{DISPLAY} =~ s/\Device//s;
令我惊讶的是它同时匹配device和Device!
我在文档中没有发现\D的提及,只有\d。
可以有人澄清一下吗...
\D
是 \d
的否定,它匹配所有非数字字符。
在那个正则表达式中,\D
看起来像是一个笔误。它之所以能匹配到 d
和 D
,仅仅因为它可以匹配任何非数字字符(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)
而且在那行代码中并没有进行任何匹配。
s/Device//si
),而不是这个\D
的混淆用法... - Woobleperldoc perlre
,或者访问这里:http://perldoc.perl.org/perlre.html。 - FMc\D
的"错误"用法,而不是"混淆"用法...那个正则表达式也会匹配"crevice", "Levice"甚至是"#evice",不仅仅只有"device"和"Device"。 - Dave Sherohman