我正在尝试从一个PHP文件中提取所有的查询。我使用PHP反射来检索一个方法的内容。
当我使用反射时,字符串看起来有点像这样:
DB::statement('\n
ALTER TABLE `activity` \n
ADD `deleted_at` TIMESTAMP NULL\n
');\n
DB::statement('\n
ALTER TABLE `activity_recurrence` \n
ADD `deleted_at` TIMESTAMP NULL\n
');\n
我试图捕获statement()
函数中的任何内容。我已经尝试了很多不同的正则表达式选项,但我无法破解这个问题。
我现在使用这个正则表达式:()\(([^)]*)\)
。它抓取括号之间的任何内容,但不检查它是否有statement
后缀。我一直在尝试使用这个answer,但我无法让它工作。
先谢了!
2条答案
按热度按时间cnwbcb6i1#
如果您想在语句函数内部执行任何操作,可以使用带有2个捕获组的递归模式。
然后可以取第2组的值。
(
捕获组1\(
匹配(
(
捕获组2(?>[^()]++|(?1))*
原子组,匹配除括号外的1个或多个字符,或使用(?1)
递归第一个子模式)
关闭组2\)
匹配)
)
关闭组1参见regex101 demo。
lmyy7pcs2#
所以arkascha为我指明了正确的方向。下面是一个普通的PHP解决方案。
在我的例子中,我将这样使用它: