获取括号内的所有文本,如果第一个括号错过了正则表达式

问题描述:

我正在尝试编写正则表达式,它可以匹配括号和括号之间的所有文本。但有一个条件:第一个支架可能会错过。 例如:获取括号内的所有文本,如果第一个括号错过了正则表达式

今天是[晴天]

今天是晴天]

在第一种情况下我想要得到[晴天]。在第二我想得到今天是阳光灿烂的日子]

我写了正则表达式,但它只适用于第一种情况。

(?(?=\[).*?|)\]

我试图设置其他行动这样

(?(?=\[).*?|.*?)\]

但在这种情况下,我得到了今天是[晴天],而不是仅仅[晴天]

是否有正则表达式可以解决我的问题?

+1

'(\ [* \。?] |^[^ \ [\]] * \])'也许作品? – apokryfos

+3

'\ [?[^ \] \ [] * \]'应该够了。 –

+0

感谢双方的工作! –

假设嵌套括号不应被认为是可以简单地使用

\[?[^\]\[]*\] 

或具有少一些逸出

\[?[^][]*] 

这将任选匹配的开口正方形支架,任何内容不包含方括号和方括号。

参见https://regex101.com/r/97F2wM/1

(加入\n到否定的字符类,以避免线重叠)