首页 > 解决方案 > 如何匹配正则表达式中的第一个字符串,然后在正则表达式中运行另一个递归模式?

问题描述

正则表达式不捕获最后一个右括号并在第一个右括号处停止。

运行正则表达式:

@media.*(\{([^{}]|(?R))*\})

不捕获得到第二个括号。

@media screen and (min-width:750px){h1{font-size:2.5em}
  test
 } //doesn't capture
}

随意在这里尝试一下: https ://regex101.com/r/lF0fI1/457

我试图匹配第一个@media 字符串,继续直到它到达第一个括号或'{',然后运行递归表达式来捕获嵌套的括号。

标签: phpregexrecursionnested

解决方案


你的问题之一是

@media.*            

.*本质上是贪婪的,所以它尽可能匹配你需要通过添加?或使用使它变得懒惰[^\{]*

其次是你应该使用 ,因为重复完整的表达式,但你需要一个重复的子模式numbered recursive regex (?1)(?R)

Regex Demo


推荐阅读