1

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

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

[[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) 方法。

但是,如果我省略^and 只是(\[\[).+(\]\])让它在行的开头匹配得很好,但也匹配我不想要的内联实例。

谁能指出这里的错误是什么?谢谢

4

3 回答 3

0

.+是贪婪的,因为它会匹配它可以匹配的所有东西(在这里,匹配所有东西到最后一个\]\]

要停止这种行为,只需添加一个?使其不贪婪

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

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

于 2013-10-11T15:47:26.237 回答
0

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

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

String result = subject.replaceAll("(?m)^\\[\\[.+?\\]\\]", "");
于 2013-10-11T15:48:06.543 回答
-2

(\[\[).+(\]\]){1}+{1}+ 表示恰好是一次改进链接

于 2013-10-11T15:43:19.990 回答