2012-02-22 50 views
3

我寫了一個正則表達式,它將用偶數個斜槓替換奇數個斜槓,而使偶數個斜槓完好無損。但由於某些原因,我得到一個錯誤:我的正則表達式有什麼問題嗎?

int matchFlags = StringUtil.MATCH_SINGLELINE; 
int replaceFlags = StringUtil.REPLACE_ALL + StringUtil.REPLACE_BACKREFERENCES; 
String pattern = "(?<!/)/(//)*(?!/)"; //replace odd # of slashes only. 
String replace = "$0$0"; 
RE re = new RE(pattern, matchFlags); 
result= re.subst(result, replace, replaceFlags); 

這是異常

Exception in thread "main" org.apache.regexp.RESyntaxException: Syntax error: Missing operand to closure 
+1

請不要在你的問題中使用HTML。改爲使用[Markdown](http://stackoverflow.com/editing-help)。 – adarshr 2012-02-22 09:42:17

+1

好的謝謝你的提示 – Wael 2012-02-22 09:45:38

+0

'「奇/斜槓///替換// // ////".replaceAll("(? beerbajay 2012-02-22 10:03:20

回答

1

這工作得很好:

public class Test { 
    public static void main(String[] args) { 
     System.out.println(args[0].matches("(?<!/)/(//)*(?!/)")); 
    } 
} 

也許你的RE預期不同的東西

+0

它是apache正則表達式不是java一個... – 2012-02-22 09:53:56

+0

我沒有否認;我只是想表明,表達式本身正在工作 – Hachi 2012-02-22 10:02:13

+0

如何使用apache reg exp獲得相同的結果? – Wael 2012-02-22 10:12:31

2

看來,你不能使用負面展望無線th org.apache.regexp。也許你應該考慮使用其他庫...

+1

你顯然不能用後視或前瞻 - '(?<!/)'或'(?!/)' - 用RE。有關接受的語法,請參見[這裏](http://jakarta.apache.org/regexp/apidocs/org/apache/regexp/RE.html)。但是,您可以將它們用於Java [Pattern](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html)。 – Feysal 2012-02-22 10:08:32