php - 如何匹配正则表达式中的第一个字符串,然后在正则表达式中运行另一个递归模式?
问题描述
正则表达式不捕获最后一个右括号并在第一个右括号处停止。
运行正则表达式:
@media.*(\{([^{}]|(?R))*\})
不捕获得到第二个括号。
@media screen and (min-width:750px){h1{font-size:2.5em}
test
} //doesn't capture
}
随意在这里尝试一下: https ://regex101.com/r/lF0fI1/457
我试图匹配第一个@media 字符串,继续直到它到达第一个括号或'{',然后运行递归表达式来捕获嵌套的括号。
解决方案
你的问题之一是
@media.*
.*
本质上是贪婪的,所以它尽可能匹配你需要通过添加?
或使用使它变得懒惰[^\{]*
其次是你应该使用 ,因为重复完整的表达式,但你需要一个重复的子模式numbered recursive regex
(?1)
(?R)
推荐阅读
- algorithm - 找到最快的路径
- excel - Excel中的自定义窗格
- php - Set admin email as BCC for WooCommerce cancelled and failed orders
- css - 为什么我的 PrimeFaces 应用与展示柜看起来不一样?
- reactjs - Memoize functional component using react-redux, reselect and React.memo()
- python - 如何通过将对象键解析为参数从 S3 存储桶下载文件?
- python - 链接:致命错误 LNK1104:无法打开文件 'OLDNAMES.lib'
- c# - 重试机制捕获异常将不起作用
- reactjs - 使用 React Component 中另一个对象的 id 按 id 检索对象
- javascript - 如何在显示之前检查网页图像?