optional regex-match?

Wie kann ich ein optionales Zeichen im regex-Ausdruck?

Ich bin versucht zu schreiben, eine kleine Datei, die macht ein wenig Zimmerreinigung zu unserer NAS.

Geht das Skript durch die Ordner innerhalb des angegebenen root-Ordner.

Für meine Tests die Wurzel ist C:\Users\Solignis\Desktop\Orders

Dies ist, wo ich das erste match stattfinden, überprüft es, um sicherzustellen, dass die Datei entspricht unserer standard-Namenskonvention, die die Stadt + 3-stellige Ordner + 3-stellige Dateinummer.

Manchmal aber haben wir extra Dateien, die eine _1 or _2 auf, um Sie zu Kennzeichnen, wird eine zusätzliche Seite.

Wie kann ich diese regex-Ausdruck passen auch die "optionalen" _1 or _2 and sometimes _3 ins Spiel?

Code:

$file =~ /^ ((C[A|F|L]|ME)) (\d{3}) (\d{3}) \. (PDF) /xmi

Ich bin sicher, dies ist einfach etwas hab ich noch Schleifen im Gehirn ab, zu "bohren" in diesem riesigen hash von arrays, die ich gemacht, das ist sowas wie 25k Dateien in einigen der arrays.

Jede Hilfe wäre sehr geschätzt werden.

Dank

  • Tut [A|F|L] für Sie arbeiten? [AFL] ist richtig, IMHO, und auch doppelte Klammern ((....)) zu (C[AFL]|ME) wäre besser
  • Das bedeutet, dass die gleiche Sache? Wenn das so für mich funktioniert, denn es arbeitet mit dem Wechsel zwischen den einzelnen Buchstaben zu. Aber deine Art und Weise ist weniger überladen.
  • nicht dasselbe, ich denke, deine regex passt auf die Datei mit dem Namen "C|111222.PDF". und Doppel-Klammern machen Ihre $1 und $2 ist der gleiche. Aber nur die änderung ((...)) zu (...) brechen würde Ihrem code, müssen Sie den code aktualisieren, die verwendet $3, $4, $5, IMHO.
  • die | nichts tun, außer verursachen C| zu einem gültigen match
  • Ich sehe, auch der einzige gültige Spiele "sollte" CA, CF, CL and ME sonst nichts.
  • Durch die Art und Weise, warum Sie dieses verwenden: (PDF) in deiner regex?

InformationsquelleAutor ianc1215 | 2011-05-12
Schreibe einen Kommentar