我到处搜寻,我找不到我做错了什么。
我有这个正则表达式:^(\[\[).+(\]\])
我希望匹配这个数据,该数据从行的开头开始,如下所示(我不想匹配任何东西,除了从头开始的东西)一行):
[[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)方法。
但是,如果我省略^
并且只有(\[\[).+(\]\])
它在行的开头匹配正常,但也匹配我不想要的内联实例。
有谁可以指出这里的错误是什么?谢谢
答案 0 :(得分:0)
.+
贪婪,因为它会匹配所有内容(此处,匹配所有内容直到最后\]\]
要停止此行为,只需添加?
即可使其非贪婪
^\[\[.+?\]\]
匹配[[
然后查找任何字符,直到找到第一次出现的]]
答案 1 :(得分:0)
^
表示“字符串的开头”,而不是“行首”,除非您在构建正则表达式时使用Pattern.MULTILINE
(或(?m)
)选项。此外,你应该使用一个懒惰的量词(如Dave Newton在评论中指出的那样)。
最后,不要忘记加倍反斜杠:
String result = subject.replaceAll("(?m)^\\[\\[.+?\\]\\]", "");
答案 2 :(得分:-2)
(\[\[).+(\]\]){1}+
{1} +表示恰好一次improve link