2016-12-13 25 views
0

我很努力地理解为什么下面的正则表达式不工作。我的要求如下。正则表达式匹配非前面的字符和匹配后面的字符

匹配没有跟随的“配置”。 (期)。对于那些匹配的,“配置”不应该在*之前。此外,这应该是函数参数意味着它应该介于(和)之间。以下是我的,并没有给我正确的价值观。这是用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

删除\\从正则表达式开始和结束它将工作。使用正则表达式(.*(?<!\\*)" + key + "(?!\\.).*)

我试过这是第一次给true,第二次给false

+0

感谢您的回复。我也需要他们之间的派生。正如我上面提到的,我拥有正确的正则表达式,但是在导致问题的条件1中存在拼写错误。 – Karthik

+0

@Karthik所以你解决了这个问题或者它尚未解决? – SachinSarawgi

+0

如果你想包括圆括号也使用'(\\(。*(?<!\\ *)“+ key +”(?!\\。)。* \\))' – SachinSarawgi

0

感谢您的回复。在条件1中我有一个错字,在那里我给了配置文件而不是配置文件。我使用的正则表达式最初是正确的,但由于错字,我必须花费很多时间进行调试!如果需要这种功能,任何人都可以使用。

相关问题