如果使用正则表达式错过第一个括号,则在括号之间获取所有文本

时间:2017-10-11 13:05:53

标签: php regex pcre

我正在尝试编写regexp,它可以匹配括号和括号之间的所有文本。但有一个条件:可以错过第一个括号。 例如:

今天是[晴天]

今天是晴天]

在第一种情况下,我想要 [晴天] 。第二,我想得到今天是晴天]

我写的是regexp,但它仅适用于第一种情况。

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

我试图像这样设置其他动作

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

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

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

1 个答案:

答案 0 :(得分:1)

假设不考虑嵌套括号,您只需使用

即可
\[?[^\]\[]*\]

或稍微逃避

\[?[^][]*]

这可选择匹配一个左方括号,任何不包含方括号和结束方括号的内容。

请参阅https://regex101.com/r/97F2wM/1

(将\n添加到否定字符类以避免行重叠)