2016-06-14 18 views
1

den regulären Ausdruckregex: aufeinander folgendes Spiel Scheitern

[^a-zA-Z]([A-Z][&+-\/\\][A-Z](([&+-\/\\][A-Z])+[^a-zA-Z\d:])) 

und will Buchstaben durch Symbole abgegrenzt Übereinstimmen, erreicht der Ausdruck erfolgreiche Übereinstimmungen, aber nicht richtig Muster übereinstimmen, die sofort richtige Matches folgen. Beachten Sie, dass bei der Ausführung die Groß-/Kleinschreibung nicht beachtet wird.

Zum Beispiel in dem Beispiel

Pizza abc C/A/R/L zu R/O/F/L s

abc und R/A/F/L sind richtig angepasst, aber C/A/R/L ist nur teilweise angepasst (A/R/L). Wie kann das behoben werden?

Unten ist ein Regex101-Modell: aber zum Verwechseln scheint es nicht die gleiche Art von Verhalten zu zeigen, wie ich sonst sehe.

https://www.regex101.com/r/zV8wI0/1

+1

Probieren Sie ['\ b [a-zA-Z] (?: [./] [A-Za-z]) * \ b'] aus (https://www.regex101.com/r/aQ0sU0/ 1). –

+0

@ WiktorStribiżew das ist die richtige Antwort (braucht ein wenig Bearbeitung für meine Zwecke, aber beantwortet die Frage) – Stumbler

Antwort

1

können Sie

\b[a-zA-Z](?:[./][A-Za-z])*\b 

verwenden, um die regex demo

Siehe Wenn Sie \b (Wortgrenze) nicht ganze Wörter entsprechen müssen, entfernen.

Erklärung:

  • \b - führende Wortgrenze
  • [a-zA-Z]-1 Brief
  • (?:[./][A-Za-z])* - null oder mehr Sequenzen (HINWEIS: Wenn Sie mindestens eine . oder / benötigen, replace * with a +) von:
    • [./] - ein Punkt oder ein / Symbol
    • [A-Za-z]-1 Brief
  • \b - Wortgrenze Hinter

Wenn Sie c.a und r.l in c.a/r.l passen müssen, müssen Sie etwas verwenden, wie

\b[a-zA-Z](?:(?:\.[A-Za-z])+|(?:/[A-Za-z])+)\b 

Siehe another regex demo.