2016-12-13 1 views
0

Ich bin schwer zu verstehen, warum die folgende Regex nicht funktioniert. Meine Anforderung ist wie folgt.Regex, um nicht vorhergehende Zeichen und übereinstimmenden folgenden Zeichen

Übereinstimmung "config", die nicht gefolgt wird. (Zeitraum). Für diejenigen, die übereinstimmen, sollte "config" nicht mit * vorangestellt werden. Dies sollte auch die Funktion params sein, die zwischen (und) liegen sollte. Folgendes ist, was ich habe und es gibt mir keine richtigen Werte. Dies ist in Java.

String condition1 = "config.property == function(/*config ConfigCon */config,\"\")"; 
String condition2 = "config.property == function(/*config ConfigCon */config.prop1,\"\")"; 
String key = "config"; 
String matchString = "\\(.*(?<!\\*)" + key + "(?!\\.).*\\)"; 
System.out.println(matchString); 
Pattern p = Pattern.compile(matchString); 
Matcher m = p.matcher(condition1); 
//The below should say true; 
boolean cond = m.find(); 
//The below should say false; 
m = p.matcher(condition2); 
cond = m.find(); 

Meine Logik ist mit entkam beginnen (gefolgt von einem oder mehreren Zeichen, Negativ Lookbehind für entkam * gefolgt von durch negative Vorschau für esscaped gefolgt Schlüssel., Gefolgt von einer oder mehr Zeichen gefolgt von entkam). Was vermisse ich hier.

Antwort

0

Entfernen \\ von Regex Start und Ende wird es funktionieren. Verwenden Sie Regex (.*(?<!\\*)" + key + "(?!\\.).*).

Ich versuchte dies gab es true für erste und false für Sekunde.

+0

Vielen Dank für Ihre Antwort. Ich brauche sie auch zwischen den Klammern. Wie ich oben bemerkte, hatte ich die Regex-Recht, aber hatte einen Tippfehler in der Bedingung1, die das Problem verursacht. – Karthik

+0

@Karthik also hast du das Problem gelöst oder es ist noch zu lösen ?? – SachinSarawgi

+0

Wenn Sie Klammern einschließen möchten, verwenden Sie auch '(\ (* (? SachinSarawgi

0

Vielen Dank für Ihre Antworten. Ich hatte einen Tippfehler in Zustand1, wo ich confie statt config gegen Ende gab. Die Regex, die ich hatte, war anfangs korrekt, aber ich musste viel Zeit mit dem Debuggen verbringen wegen Tippfehler !! Es ist für jeden da zu verwenden, wenn sie diese Art von Funktionalität benötigen

Verwandte Themen