regex - 匹配多行正则表达式以 if 开头并以以右花括号开头的行结尾
问题描述
我有一个很长的 PHP“类”,其中包含许多我想用 Python 脚本转换的 if 块。因此,我想匹配每个“父级别”if-block 并将其作为项目传递到列表中以供进一步处理。
pattern = re.compile(r'^if[^(\n\})]*\}$', re.M)
result = re.findall(pattern, filecontent)
所以我现在尝试了很多变种,到目前为止都没有成功。当然,我们在这些 if 块中有嵌套 if 语句的情况。所以我们不能只匹配到下一个右花括号。
幸运的是,代码格式清晰,因此我可以匹配多行,从以“if”开头的行开始,到行首的右花括号结束。
^if // line starting with 'if'
[^(\n\})]* // followed by zero or more characters that are not
// a closing curly brace preceded by a newline character
\n\}$ // ending with a closing curlybrace preceded by \n
这种方法似乎是我最好的尝试。但它不匹配任何东西。
这是一些用于测试的片段,处理它应该会产生 3 个列表项: https ://pastebin.com/2WHC1k6f
解决方案
推荐阅读
- r - 数据框之间的条件搜索、匹配、过滤和替换值
- vb.net - vb.net 托管内存和堆稳定但进程内存使用导致崩溃
- gcc - GCC libc 版本
- apache - Ant - 宏定义中 concat 目标中的字符串重复 - 为什么
- sql-server - 如何使用触发器更新 SQL Server 中的列
- c# - 返回线上的 Parasoft 违规 EXCEPT.NCSAE-3
- windows - 我可以将 Google Assistant 消息发送到我的 Windows 应用程序,但如何发回消息?
- asp.net - 无法将 IdentityServer4 添加到 ASP.NET Framework 4.7.2 API OWIN
- maven - 我在 Checkstyle 配置文件中的哪里放置模块元素?
- javascript - Javascript:用链调用 new 实例化一个对象