Php 如果正则表达式缺少第一个括号,则获取括号之间的所有文本

Php 如果正则表达式缺少第一个括号,则获取括号之间的所有文本,php,regex,pcre,Php,Regex,Pcre,我正在尝试编写regexp,它可以匹配方括号和方括号之间的所有文本。但有一个条件:第一个括号可能会丢失。 例如: 今天是[晴天] 及 今天是晴天] 在第一种情况下,我想得到[晴朗的一天]。第二,我想知道今天是晴天 我编写了regexp,但它只在第一种情况下起作用 (?(?=\[).?)\] 我试着让其他人这样做 (?(?=\[).* 但在这种情况下,我得到的是【晴天】,而不是【晴天】 有一个正则表达式可以解决我的问题吗?假设不考虑嵌套括号,您只需使用 \[?[^\]\[]*\] 还是少一点逃跑

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

今天是[晴天]

今天是晴天]

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

我编写了regexp,但它只在第一种情况下起作用

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

我试着让其他人这样做

(?(?=\[).*

但在这种情况下,我得到的是【晴天】,而不是【晴天】


有一个正则表达式可以解决我的问题吗?

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

\[?[^\]\[]*\]
还是少一点逃跑

\[?[^][]*]
这将可选地匹配开始方括号、任何不包含方括号和结束方括号的内容


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

(\[.*.\]\\\]^[^\[\]*\])
可能有效?
\[?[^\]\[*\]
应该足够了。感谢这两项工作!!!