Ich versuche eine passende Regex zu erhalten:
%Vor%stimmt aber nicht überein:
%Vor%Ich habe es versucht
%Vor%ohne Glück (es enthält sogar die "16" Aufnahme)
Einige Regex-Bibliotheken erlauben Lookahead:
%Vor%Ansonsten können Sie immer noch mehrere Zeichenklassen verwenden:
%Vor%oder, um maximale Portabilität zu erreichen:
%Vor% [^(16)]
bedeutet: Entsprechen Sie einem beliebigen Zeichen, aber geschweiften Klammern, 1 und 6.
Die beste Lösung wurde bereits erwähnt:
%Vor%Das funktioniert, und es ist gierig genug, alles, was darauf kommt, auf die gleiche Linie zu bringen. Wenn Sie jedoch wissen, dass Sie einen gültigen Dateinamen haben möchten, schlage ich vor, auch ungültige Zeichen zu beschränken:
%Vor%Wenn Sie mit einer Regex-Engine arbeiten, die Lookahead nicht unterstützt, müssen Sie überlegen, wie Sie das schaffen! Sie können Dateien in zwei Gruppen aufteilen, die mit 1 beginnen und nicht gefolgt von 6, und diejenigen, die mit etwas anderem beginnen:
%Vor%Wenn Sie somefile_16_stuff.txt, aber nicht somefile_16.txt zulassen wollen, sind diese obigen Ausdrücke nicht ausreichend. Sie müssen Ihr Limit anders festlegen:
%Vor%Kombinieren Sie all dies und Sie erhalten zwei Möglichkeiten, eine, die die einzelne Instanz blockiert (somefile_16.txt), und eine, die alle Familien blockiert (somefile_16 * .txt). Ich persönlich denke, Sie bevorzugen die erste:
%Vor%In der Version ohne Sonderzeichen zu entfernen, so ist es einfacher zu lesen:
%Vor%Um genau zu Ihrer Spezifikation zu gehorchen und wählerisch zu sein, sollten Sie lieber verwenden:
%Vor%, so dass somefile_1666.txt, das {alles} ist, angepasst werden kann;)
aber manchmal ist es einfach lesbarer zu benutzen ...:
%Vor%(?! 16) bedeutet: Stellen Sie sicher, dass es unmöglich ist, den Regex "16" ab dieser Position abzugleichen.
Manchmal ist es einfacher, zwei reguläre Ausdrücke zu verwenden. Suchen Sie zuerst nach allem, was Sie wollen, und ignorieren Sie dann alles, was Sie nicht tun. Ich mache dies die ganze Zeit in der Befehlszeile, wo ich eine Regex pipe, die eine Obermenge in eine andere Regex bekommt, die Dinge ignoriert, die ich nicht will.
Wenn das Ziel darin besteht, den Job zu erledigen, anstatt den perfekten Regex zu finden, dann sollten Sie diesen Ansatz in Betracht ziehen. Es ist oft viel einfacher zu schreiben und zu verstehen als eine Regex, die exotische Funktionen nutzt.
Ohne Lookahead zu verwenden
%Vor% Lesen Sie es wie folgt: somefile_
gefolgt von entweder:
1
und gefolgt von anderen Zeichen. 10
.. 19
Beachten Sie, dass 16
weggelassen wurde. und schließlich gefolgt von .txt
.
Tags und Links regex