Java中的正则表达式问题

时间:2013-10-11 15:35:32

标签: java regex

我到处搜寻,我找不到我做错了什么。

我有这个正则表达式:^(\[\[).+(\]\])我希望匹配这个数据,该数据从行的开头开始,如下所示(我不想匹配任何东西,除了从头开始的东西)一行):

[[match this]]   [[don't match this]]
{{Link GA|es}}
{{Link FA|ca}}

由于某些原因,它与Java(或其他正则表达“测试者”,如regexpal.com)中的任何内容都不匹配。 “在Java中”是指Java String API中的String.replaceAll(String regex,String replacement)方法。

但是,如果我省略^并且只有(\[\[).+(\]\])它在行的开头匹配正常,但也匹配我不想要的内联实例。

有谁可以指出这里的错误是什么?谢谢

3 个答案:

答案 0 :(得分:0)

.+贪婪,因为它会匹配所有内容(此处,匹配所有内容直到最后\]\]

要停止此行为,只需添加?即可使其非贪婪

    ^\[\[.+?\]\]

匹配[[然后查找任何字符,直到找到第一次出现的]]

答案 1 :(得分:0)

^表示“字符串的开头”,而不是“行首”,除非您在构建正则表达式时使用Pattern.MULTILINE(或(?m))选项。此外,你应该使用一个懒惰的量词(如Dave Newton在评论中指出的那样)。

最后,不要忘记加倍反斜杠:

String result = subject.replaceAll("(?m)^\\[\\[.+?\\]\\]", "");

答案 2 :(得分:-2)

(\[\[).+(\]\]){1}+ {1} +表示恰好一次improve link