匹配成对的括号并且嵌套层次未知时,就要用到递归匹配了,以下是匹配php的class类的正则:
preg_match_all('/class [^\{]*(?<R>\{(?:[^{}]+|(?&R))*\})/',$content,$matches );
不过还是有意外情况,在类的字符串变量中包含{或}时,就会出错了。
更多使用方法请参考PHP官方说明文档:
https://www.php.net/manual/zh/regexp.reference.recursive.php
匹配成对的括号并且嵌套层次未知时,就要用到递归匹配了,以下是匹配php的class类的正则:
preg_match_all('/class [^\{]*(?<R>\{(?:[^{}]+|(?&R))*\})/',$content,$matches );
不过还是有意外情况,在类的字符串变量中包含{或}时,就会出错了。
更多使用方法请参考PHP官方说明文档:
https://www.php.net/manual/zh/regexp.reference.recursive.php
先贴上代码:
preg_match_all('~\$[^0-9/ =\[\]\(\)a-z_\+\$,\';\{\}-]+~is', $content, $vars);
这里的匹配原理是,不包含数字、字母、下划线和一些边界字符。
不过这个也不是万能的,要根据实际情况再来修改。