我正在努力理解为什么以下正则表达式不起作用。我的要求如下。
匹配未跟随的“config”。 (期)。对于那些匹配的,“config”不应该以*开头。此外,这应该是函数参数,意思是它应该在(和)之间。以下是我所拥有的,并没有给我正确的价值观。这是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。接下来是一个或多个字符,然后是转义)。我在这里错过了什么。
答案 0 :(得分:1)
从正则表达式的开始和结束中删除\\
它将起作用。使用正则表达式(.*(?<!\\*)" + key + "(?!\\.).*)
。
我试过这个,它首先给true
,第二个给false
。
答案 1 :(得分:1)
感谢您的回复。我在条件1中输入了一个拼写错误,我在最后给出了confi而不是config。我最初的正则表达式是正确的,但由于拼写错误我不得不花很多时间调试!如果他们需要这种功能,任何人都可以使用它