2016-12-13 26 views
0

次の正規表現が機能しない理由を理解するのは難しいです。私の要件は以下の通りです。正規表現と一致しない文字と一致する正規表現

"config"と一致しない。 (期間)。一致するものについては、 "config"の前に*を付けるべきではありません。また、関数paramsは、(と)の間にあることを意味します。以下は私が持っているものであり、私には正しい値が与えられていません。これは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(); 

私のロジックで開始された(一つ以上の文字、エスケープ* esscapedのための否定先読みが続くキーが続くため負の後方参照が続く。エスケープに続く1つ以上の文字が続く)脱出しました。私はここで何が欠けているのですか?

答えて

0

\\をregex startから削除して終了させて​​ください。正規表現(.*(?<!\\*)" + key + "(?!\\.).*)を使用してください。

私はこれを試しましたが、最初にtrue、そしてfalseが2番目になりました。

+0

ご返信ありがとうございます。私はまた、それらを括弧の間にする必要があります。上記のとおり、私は正規表現の権利を持っていましたが、問題の原因となった条件1にタイプミスがありました。 – Karthik

+0

@Karthikので、あなたは問題を解決したか、まだ解決されていますか? – SachinSarawgi

+0

カッコを入れる場合は、 '(\\(。*)?key +"(?!\\。)。* \\)) ' – SachinSarawgi

0

お返事ありがとうございます。私は最後にconfigの代わりにconfiを与えていたcondition1にタイプミスがありました。私が持っていた正規表現は最初は正しかったが、タイプミスのためにデバッグに多くの時間を費やさなければならなかった!!このような機能が必要な人は、誰でも使用できます。

関連する問題