2016-07-15 2 views
2

Ich brauche eine Regex mit folgenden Anforderungen beginnen oder enden:Java regex kann nicht mit Schrägstrich oder Raum, und keine aufeinanderfolgende Schrägstriche

  • enthalten kann alphanumerische Zeichen, Leerzeichen und schlitzt
  • kann nicht gestartet werden oder Ende mit dem Raum oder zerschneiden
  • nicht aufeinanderfolgende Schrägstriche
  • können zwischen 2 und 20 Zeichen in der Länge

enthalten kann ich Folgendes bisher:

^[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$ 

Ich denke, es deckt alles außer aufeinanderfolgenden Schrägstrichen ab. Gibt es eine Möglichkeit, diese Anforderung in Java Regex zu erfüllen?

Antwort

5

können Sie diese Bedingung hinzufügen, am Anfang einen Look-Ahead mit:

^(?!.*//)[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$ 
^^^^^^^^ 

Siehe regex demo

Die Look-Ahead-(?!.*//) ist negative aufgrund (?! und das Spiel ausfällt, sobald es jeden // nach jedem findet 0+ Zeichen außer einem Zeilenumbruch (.*).

Sie es mit String#matches (siehe demo) ohne ^ und $ verwenden:

String input = "abc //abc"; 
if (!input.matches("(?!.*//)[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]")) { 
     System.out.println("Not matching!");  
} 

als String#matches eine vollständige Zeichenfolge Spiel erfordert, aber ich würde die Anker explizit für Klarheit halten.

Verwandte Themen