2016-08-11 2 views
-2

Ich habe folgenden Perl-Code:Regex Matching [0-9] - [A-Z0-9] .wav

perl -ane 'm|/(..)/([1-9zo]+[ab])\.wav| || die "bad line $_"; print "$1_$2 $_";' 

Statt einen Dateipfad wie /m/ad/11b.wav passend Ich brauche einen Dateipfad passen wie :

/m/6-23E5CD3A14BC47154F29E25578FC4.wav 
+1

Willkommen Überlauf zu stapeln. Was passiert, wenn Sie die Regex im Titel in das Programm einfügen? Sie müssen den Teil anpassen, der zwei Buchstaben zwischen Schrägstrichen entspricht, um nur einen zuzulassen. Sie müssen nach der zweiten Zeichenklasse einen geeigneten Quantifizierer hinzufügen. Aber das ist alles. –

+0

Sieht aus, als wären Sie tatsächlich auf hexadezimale Zeichen beschränkt, so dass '[0-9A-Z]' möglicherweise zu breit ist. Etwas wie 'm | /./ [0-9] - [0-9A-F] {29} \ .wav |'. Sie können auch '[[: xdigit]]' verwenden – shawnt00

Antwort

-1

In welcher Form wollen Sie $ 1 und $ 2 sein? Möchtest du, dass $ 1 wie "/ m" ist? Möchten Sie, dass $ 2 "6-23 ..." ist? Etwas anderes?

m|(..)/([[:digit:][:upper:]-]+)(?>\.wav)$| || die; print "$1_$2 $_"; 

Diese Regex produziert:

/m_6-23E5CD3A14BC47154F29E25578FC4