2011-06-20 14 views
8

W pewnym kodem jestem utrzymując, znalazłem wyrażeniem:Co robi D robić w Perl wyrażeń regularnych

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

Co mnie dziwi to, że pasuje zarówno urządzenie i urządzenie!

Nie znalazłem żadnej wzmianki o \ D w dokumentacji, tylko \ d.

Czy ktoś może wyjaśnić, proszę ...

+0

Prawie na pewno potrzebujesz dopasowania niewrażliwego na wielkość liter ('s/Device // si'), a nie tego zaciemnionego użycia' \ D' ... – geoffspear

+1

Warto również wiedzieć, że uruchamiasz 'perldoc perlre' na swoim w linii poleceń lub przejdź tutaj: http://perldoc.perl.org/perlre.html. – FMc

+2

Nazwałbym to "niepoprawnym" użyciem '\ D' zamiast" zaciemnionym "użyciem ... To wyrażenie dopasuje również" szczelinę "," Levice ", a nawet" #evice ", a nie tylko" urządzenie " "i" Urządzenie ". –

Odpowiedz

19

\D jest negacją \d, to znaczy, że nie pasuje do niczego jest cyfrą.

+0

Dzięki, to wyjaśnia! – Roger

+2

@Roger Jeśli podoba Ci się odpowiedź sepp2k, powinieneś kliknąć znacznik wyboru po lewej stronie, aby zaznaczyć, że ta odpowiedź odpowiedziała na twoje pytanie. – TLP

+0

To była definitywnie poprawna odpowiedź, dzięki sepp2k – Roger

11

W tym regex, \D wygląda jak literówka. Działa zarówno dla d i D, tylko dlatego, że pasuje do dowolnego znaku, który nie jest cyfrą (0-9).

Bardziej odpowiednie wyrażenie regularne (jeżeli zamiarem jest dopasowanie „urządzenie” i „urządzenie”) oznacza:

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

Opcja s jest nieco nieparzysta. Od perldoc perlop

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

I nie ma takiego dopasowania dzieje się na tej linii.

+0

Tak, myślę, że "\" było błędem "wycinania i wklejania", ponieważ wymagane było dopasowanie z Urządzeniem ... – Roger

+0

Dziwny błąd kopiowania/wklejania ... nie wydaje się, że jest tam w jakimkolwiek kontekście, z wyjątkiem być może ze ścieżki Windows, np "c: \ Device" ... – TLP

Powiązane problemy