Best Practice: Partielle Regex-Anpassung

8

Ich bin mir nicht sicher, ob Regexes hier die beste Lösung sind, aber sie erscheinen logisch genug; Ich bin mir nicht sicher, wie ich das umsetzen soll.

Grundsätzlich möchte ich, dass mein Benutzer in der Lage ist, einen Methodennamen einzugeben und ihn nach jeder Zeicheneingabe auf Gültigkeit prüfen zu lassen. Ich habe ein gültiges Funktionsformat als Regex definiert, und es ist einfach genug zu testen, ob die beiden übereinstimmen. Das Problem ist, ich möchte in der Lage sein, eine teilweise Übereinstimmung zu machen, um den Benutzer wissen zu lassen, "Bis jetzt ist das gültig".

Zum Beispiel

%Vor%

ist eine gültige Methode. Es kann mit einer einfachen Regex-Zeichenfolge wie

verglichen werden %Vor%

. Aber ich würde gerne in der Lage sein, die gleiche Regex-Zeichenfolge "match"

zu haben %Vor%

(was ich realisiere, ist eine Art umgekehrter Regex-Modus). Ich möchte immer noch nicht, dass die Regex übereinstimmt

%Vor%

Gibt es eine Möglichkeit, so etwas mit Standard-Regex-Funktionen zu implementieren, oder müsste ich etwas drastischeres tun?

Vielen Dank! Ihr seid von unschätzbarem Wert.

Nach weiterem Nachdenken, könnte ich meine Frage etwas klarer (und ein wenig prägnanter) machen: Normalerweise benutzt man eine Regex, um nach einem Muster im Text zu suchen. Das heißt, wie oft erscheint "Katze" oder "Wiege" in diesem Absatz. Ich möchte das Gegenteil tun, nach einer Zeichenfolge "in" einer Regex suchen. Das heißt, wie viel dieser Zeichenfolge von Anfang an mit dieser Regex übereinstimmt. Letztendlich möchte ich den Index zurückgeben, bei dem der String aufhört, mit der betreffenden Regex übereinzustimmen.

    
Plastech 11.01.2012, 17:20
quelle

2 Antworten

1

RegexKit verwendet PCRE, so dass Sie versuchen könnten, PCRE direkt zu verwenden, da es partielle Übereinstimmungen unterstützt.

%Vor%

Wird gedruckt:

%Vor%     
Mattias Wadman 04.03.2012, 13:50
quelle
0

Ich würde nur ein Skript schreiben, um die Regex zu nehmen und es so aufzuteilen, dass die Regex A B C D wird zum neuen Regex: ^ (ABCD | ABC | AB | A) $

Klammer wird schwierig sein, also vermeiden Sie sie wenn möglich. Andernfalls müssen Sie dies wahrscheinlich berücksichtigen, indem Sie einfach die korrekte Menge der schließenden Parens hinzufügen. Außerdem müssen Sie die ABCD-Zeichenfolge durch den Regex-Operator in Token setzen, damit Sie nicht etwas wie \ * +

aufteilen     
Dan 18.01.2012 12:54
quelle