2011-06-20 12 views
8

En algún código estoy manteniendo, he encontrado la expresión:lo que hace D se puede hacer en expresiones regulares de Perl

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

Lo que me sorprende es que coincide tanto con el dispositivo y el dispositivo!

No he encontrado ninguna mención de \ D en la documentación, solo \ d.

Puede alguien aclarar por favor ...

+0

Es casi seguro que desee una coincidencia insensible a mayúsculas y minúsculas ('s/Device // si') en lugar de este uso ofuscado de' \ D' ... – geoffspear

+1

También es útil saber que ejecuta 'perldoc perlre' en su línea de comando, o vaya aquí: http://perldoc.perl.org/perlre.html. – FMc

+2

Llamaría a esto un uso "incorrecto" de '\ D' en lugar de un uso" ofuscado "... Esa expresión regular también coincidirá con" grieta "," Levice "e incluso" #equipo ", no solo" dispositivo " "y" Dispositivo ". –

Respuesta

19

\D es la negación de \d, es decir, que coincide con nada que no sea un dígito.

+0

¡Gracias, eso lo explica! – Roger

+2

@Roger Si le gusta la respuesta de sepp2k, debe hacer clic en la marca de verificación a la izquierda, para indicar que esta respuesta respondió a su pregunta. – TLP

+0

Esta fue definitivamente la respuesta correcta, gracias sepp2k – Roger

11

En esa expresión regular, \D parece un error tipográfico. Funciona tanto para d como para D, solo porque coincide con cualquier carácter que no sea un dígito (0-9).

una expresión regular más apropiado (si la intención es para que coincida con "dispositivo" o "Dispositivo"), es:

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

La opción s también es un poco extraño. De perldoc perlop

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

Y no hay tal coincidencia pasando en esa línea.

+0

Sí, creo que el '\' fue un error de cortar y pegar, ya que se necesitaba una coincidencia con el Dispositivo ... – Roger

+0

Extraño error de copiar/pegar ... no parece pertenecer allí en ningún contexto que se me ocurra, excepto tal vez desde una ruta de Windows, por ejemplo "c: \ Dispositivo" ... – TLP

Cuestiones relacionadas