Regulärer Ausdruck Längste mögliche Übereinstimmung

8

Ich habe eine Eingabekette, die eine Verzeichnisadresse ist:

Beispiel: ProgramFiles/Micro/Telephone

Und ich möchte es sehr streng mit einer Wortliste abgleichen:

Beispiel: Tel|Tele|Telephone

Ich möchte mit Telephone und nicht mit Tel übereinstimmen. Im Moment sieht meine Regex so aus:

%Vor%

Der obige Regex passt zu Tel . Was kann ich tun, um es zu beheben?

    
syker 30.03.2010, 22:44
quelle

3 Antworten

9

Wenn Sie eine vollständige Übereinstimmung wünschen:

%Vor%

\b ist eine Wortgrenze mit einer Breite von null. Wortgrenze bedeutet in diesem Fall den Übergang von oder zu einem Wortzeichen. Ein Wortzeichen ( \w ) ist [0-9a-zA-Z_] .

Wenn Sie einfach mit dem längsten in einem Teilwortmatch übereinstimmen möchten, setzen Sie zuerst das längste. Zum Beispiel:

%Vor%

oder

%Vor%     
cletus 30.03.2010, 22:47
quelle
2

Ändern Sie die Bestellungen: Tel|Tele|Telephone in Telephone|Tele|Tel . Durch den Regexp-Algorithmus wird der Wechsel von links nach rechts durchsucht, wenn dort eine Übereinstimmung gefunden wird, das ist es, keine gierige Übereinstimmung. Zum Beispiel: / a | ab | abc / Arbeiten an "abc" entspricht "a" anstelle des gierigsten "abc".

oder verwenden Sie die passenden Ausdrücke.

%Vor%     
Ming-Tang 30.03.2010 22:50
quelle
-1

Wie wäre es mit dem Versuch, eine Übereinstimmung zu finden, solange die längste Übereinstimmung nicht irgendwo in der Eingabe ist? Etwas wie:

Finden Sie Telefon, ODER finden Sie Tel, und Tele wo Telefon ist nicht irgendwo in der Eingabe. Also, um es wie eine Regex aussehen zu lassen:

(Telefon) ODER Zeichen ohne Telefon, gefolgt von (tel | tele) gefolgt von Zeichen ohne Telefon

(Telefon |. * (Telefon) {0}. * (Tel | Tele). * (Telefon) {0}. *)

Macht das irgendeinen Sinn?

    
Ed Arvelaez 07.02.2011 14:21
quelle

Tags und Links