正则表达式匹配最后[括号内文本]的内容

时间:2011-03-05 13:11:21

标签: php regex

目标字符串:

  

来到城堡[马里奥],我已经烤好了   你[蛋糕]

我想匹配最后一个括号的内容,忽略其他括号,即

  一块蛋糕

我有点卡住了,有人能提供答案吗?

4 个答案:

答案 0 :(得分:2)

试试这个,使用负向前看断言

\[[^\[]*\](?!\[)$

答案 1 :(得分:1)

这应该这样做:

\[([^[\]]*)][^[]*(?:\[[^\]]*)?$
  • \[([^[\]]*)] 匹配任何不包含[…][的{​​{1}}序列;
  • ] 匹配任何不是[^[]*的后续字符(即另一个潜在的[组的开头);
  • […] 匹配未跟随结束(?:\[[^\]]*)?$的潜在单[

答案 2 :(得分:0)

你可以使用某种预测。而且因为我们不知道必须处理哪些文本/字符的确切性质,它可能看起来像这样,但它需要一些工作:

\[[a-z\s]*\](?!.*\[([a-z\s]*)\])

您的内容应匹配\ 1,或可能\ 2。

答案 3 :(得分:0)

简单是最好的:.*\[(.*?)]会做你想做的事;使用嵌套括号,它将返回最后一个,最里面的一个并忽略错误的嵌套。不需要负字符类:.*?确保您在匹配中没有任何右括号,并且由于.*确保您在最后可能的位置匹配,因此它也会保留任何“外部”左括号。