使用正则表达式查找匹配括号

Kar*_*ind 3 php regex preg-replace

假设我有这个 string: "abc{def{ghi{jkl}mno{pqr}st}uvw}xyz"

我想要匹配这个: "{def{ghi{jkl}mno{pqr}st}uvw}"

我的正则表达式应该是什么样的..?

换句话说,匹配应该以"{"开头并以"}"结尾,但它必须具有尽可能多的{'s}.

Kar*_*ind 8

我想我在另一个帖子中找到了答案..

"#\{((?>[^\{\}]+)|(?R))*\}#x"
Run Code Online (Sandbox Code Playgroud)

我用不同的字符串测试它似乎做了这个工作..

关于它是如何工作的任何评论..?优点和缺点..?

谢谢你的回答顺便说一句.. :)

  • `(?R)`实际上是封闭正则表达式的占位符.当达到正则表达式的那部分时,它递归地应用整个正则表达式.你没有听到太多,因为它很难理解甚至更难阅读 - 即使是正则表达式标准!而且,它没有你想象的那么有用. (3认同)

Ign*_*ams 5

该语法是不规则的,因此您不能使用正则表达式来解析它.

  • 是.图案不规则.但是Perl所谓的"正则表达式"(包括PHP使用的PCRE库)可以处理不规则的模式.因为它们实际上可以处理无上下文的语法. (5认同)