2016-12-13 24 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中我有一個錯字,在那裏我給了配置文件而不是配置文件。我使用的正則表達式最初是正確的,但由於錯字,我必須花費很多時間進行調試!如果需要這種功能,任何人都可以使用。

相關問題