2010-04-25 11 views

Antwort

14

Verwenden Sie ein negative lookbehind:

"(?<!\\\\):" 

Der Grund für die vier Schrägstriche ist:

  • der Backslash ein Sonderzeichen in regulären Ausdrücken ist, so dass Sie den regulären Ausdruck benötigen \\ einen einzelnen Schrägstrich übereinstimmen .
  • Backslashes müssen in Java-Strings maskiert werden, daher muss jeder der obigen Backslashes als \\ geschrieben werden, was insgesamt vier ergibt.

Beispielcode:

Pattern pattern = Pattern.compile("(?<!\\\\):"); 
Matcher matcher = pattern.matcher("foo\\:x bar:y"); 
if (matcher.find()) { 
    System.out.println(matcher.start()); 
} 

Ausgang:

10 
1

Haben Sie versucht, eine Zeichenklasse mit dem Komplement-Operator?

String s1 = "foo : bar"; 
    String s2 = "foo \\: bar"; 

    Pattern p = Pattern.compile("[^\\\\]:"); 

    Matcher m = p.matcher(s1); 
    if(m.find()) { 
     System.out.println(m.group()); 
    } 

    m = p.matcher(s2); 
    if(m.find()) { 
     System.out.println(m.group()); 
    } 
+0

Dies entspricht nicht ':' am Anfang der Zeichenfolge. – polygenelubricants

Verwandte Themen