Regex Regular Express-匹配行末尾的所有字符,但不匹配模式

Regex Regular Express-匹配行末尾的所有字符,但不匹配模式,regex,Regex,我试图组合一个正则表达式,但似乎没有达到目标。我以前用过简单的正则表达式,但是否定式总是让我感到困惑 我需要匹配整个字符串,但字符串中以和结尾的任何部分除外,字符位于两个方括号[] 例如: Hello, World! [strip this] 它应该匹配: Hello, World! 打开/关闭方括号(包括方括号)之间的任何内容都应去除。然而,我只想和最后一盘比赛 下面的例子 Hello, [cold] World! [strip this] 你应该离开 Hello, [cold] Wor

我试图组合一个正则表达式,但似乎没有达到目标。我以前用过简单的正则表达式,但是否定式总是让我感到困惑

我需要匹配整个字符串,但字符串中以和结尾的任何部分除外,字符位于两个方括号[]

例如:

Hello, World! [strip this]
它应该匹配:

Hello, World!
打开/关闭方括号(包括方括号)之间的任何内容都应去除。然而,我只想和最后一盘比赛

下面的例子

Hello, [cold] World! [strip this]
你应该离开

Hello, [cold] World!

这里不需要否定。只需在结尾锚定正则表达式:将
\s*\[^\]]+\]\s*$
替换为空:

fge@erwin ~ $ perl -ne 's,\s*\[[^\]]+\]\s*$,,; print "Result: -->$_<--\n"'
Hello, World! [strip this]
Result: -->Hello, World!<--
Hello, [cold] World! [strip this]
Result: -->Hello, [cold] World!<--
fge@erwin ~ $ 
fge@erwin~$perl-ne的\s*\[^\]+\]\s*$,,;打印“结果:-->$_

您想要的部分将在捕获组1中。请参见此处的操作:

为什么要捕获所有输入,而您需要捕获的只是结尾?他不想要结尾,他想要开头。是的,您可以去掉第二组周围的括号,我只是将它们添加进来,以便更好地说明捕获的两个部分。不,您想要吗要捕获结尾就要删除它。因此,不需要匹配开头!事实上,这里根本不需要捕获。
(.*)(\s*\[.*\])