Что делает \ D в регулярных выражениях Perl - PullRequest
8 голосов
/ 20 июня 2011

В некотором коде, который я поддерживаю, я нашел выражение:

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

Меня удивляет то, что оно соответствует как устройству, так и устройству!

Я не нашел упоминаний о\ D в документации, только \ d.

Может кто-нибудь уточнить, пожалуйста ...

Ответы [ 3 ]

19 голосов
/ 20 июня 2011

\D - это отрицание \d, то есть оно соответствует всему, что не является цифрой.

11 голосов
/ 20 июня 2011

В этом регулярном выражении \D выглядит как опечатка.Он работает как для d, так и для D, только потому, что соответствует любому символу, который не является цифрой (0-9).

Более подходящее регулярное выражение (если целью является совпадение с «устройством» или«Устройство»):

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 голосов
/ 20 июня 2011

У вас уже есть ответ, однако в perldoc perlrecharclass есть документация об этом.См. Информацию о последовательностях обратной косой черты .

. Она также упоминается в perldoc perlrequick и в обычном perldoc perlretut в разделе Использование классов символов.Тем не менее, в этих двух разделах он скорее похоронен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...