Java中的正则表达式问题

Java中的正则表达式问题,java,regex,Java,Regex,我到处都找遍了,找不到我做错了什么 我有一个正则表达式:^(\[\[).+(\]\]]),我想匹配从行首开始的数据,如下所示(我不想匹配任何内容,只想匹配从行首开始的内容): 出于某种原因,它与Java(或其他正则表达式“测试员”,如regexpal.com)中的任何内容都不匹配。我所说的“in Java”是指Java字符串API中的String.replaceAll(String regex,String replacement)方法 但是,如果我省略了^,而只使用(\[\[).+(\]\])

我到处都找遍了,找不到我做错了什么

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

出于某种原因,它与Java(或其他正则表达式“测试员”,如regexpal.com)中的任何内容都不匹配。我所说的“in Java”是指Java字符串API中的String.replaceAll(String regex,String replacement)方法

但是,如果我省略了
^
,而只使用
(\[\[).+(\]\])
,它在行首匹配得很好,但也匹配我不想要的内联实例


有人能指出这里的错误吗?谢谢你

(\[\[).+(\]\]]){1}+
{1}+这意味着正好一次的

+
是贪婪的,因为它会匹配所有它能匹配的东西(这里,匹配所有东西直到最后一次的
\]\]

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

    ^\[\[.+?\]\]
将匹配
[[
然后查找任何字符,直到找到第一个出现的
]
^
表示“字符串的开始”,而不是“行的开始”,除非您在构建正则表达式时使用
模式。多行
(或
(?m)
)选项。此外,您应该使用惰性量词(正如戴夫·牛顿在评论中指出的那样)

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

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

^\[\[(.+?)\]\]
例如,停止贪婪。假设大括号中的东西不应该匹配。你实际上想捕获括号中的东西,但你可以用括号做任何你想做的事情。实际上,我想完全删除大括号和括号中的所有东西。因此,在剪掉的示例代码中,它会删除第一个
[[match this]
第一行的内容是
[[not match this]]
。此外,我尝试将regex放在regexpal.com中的同一个数据集上,但它仍然不匹配。但它仍然匹配前面没有
^
的所有实例。请显示用于a)构建regex对象的代码,b)将其应用于字符串。
{1}
是不可操作的(因为默认情况下只匹配一次)。然后添加一个
+
将使该量词具有所有格(对于固定数量的匹配是无用的)。
String result = subject.replaceAll("(?m)^\\[\\[.+?\\]\\]", "");