从正则表达式php的捕获组的倒数第二个字符开始

从正则表达式php的捕获组的倒数第二个字符开始,php,regex,Php,Regex,我正在尝试创建一个正则表达式,它只捕获从第二次到最后一次出现的周围字符(如果你明白我的意思的话) 到目前为止,我的正则表达式是: \[(.*?)]\{(.*?\}/ig 这是我的字符串: [不要碰我]随机文本[touchme]{Secondcapturegroup} 从这个屏幕截图可以看出,它捕获了从[不要到[触摸我]的所有内容。我希望它能够有效地忽略[不要触摸我]随机文本 我仍在学习正则表达式,但我知道一定有一些东西:)您可以使用一个字符类,该类不包含右方括号,而不是使用(这样就不再需要非贪

我正在尝试创建一个正则表达式,它只捕获从第二次到最后一次出现的周围字符(如果你明白我的意思的话)

到目前为止,我的正则表达式是:

\[(.*?)]\{(.*?\}/ig

这是我的字符串:

[不要碰我]随机文本[touchme]{Secondcapturegroup}

从这个屏幕截图可以看出,它捕获了从
[不要
[触摸我
]的所有内容。我希望它能够有效地忽略
[不要触摸我]随机文本


我仍在学习正则表达式,但我知道一定有一些东西:)

您可以使用一个字符类,该类不包含右方括号,而不是使用
(这样就不再需要非贪婪量词
*?

这样,尝试第一个开口方括号将失败,因为闭合方括号后面没有开口卷曲括号

对于您的模式,您会得到一个错误的结果,因为正则表达式引擎从左侧解析您的字符串,并尝试在每个位置成功(因此第一个位置总是获胜)


请注意,
i
修饰符是无用的。

这正是我要找的,谢谢!至于
i
修饰符,我知道那是无用的-但我完全忘了我把它放在那里了。为了清洁起见,我现在把它拿走了
\[([^]]*)]{([^}]*)}