2012-02-22 37 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

相关问题