正则表达式替换PHP类中的函数名称

时间:2018-03-09 16:59:03

标签: regex sed grep pcre

我正在将PHP5应用程序转换为PHP7,其中一个要求是删除与该类名称相同的构造函数的所有实例,而是将其命名为“__construct”。

例如:

class xyz {
    public function xyz() {

需要成为

class xyz {
    public function __construct() {

我认为egrep管道进入sed可能是“整体”做到这一点的最佳方式,但我不知道这样做是否足够好。

我知道我可以使用:

class\s+([A-Za-z]+)\s+\{

捕捉班级名称,但我不确定从那里开始。

非常感谢任何帮助。

:)

1 个答案:

答案 0 :(得分:0)

如评论中所述,更好地使用脚本语言,一些逻辑和双因素方法:

  1. 使用递归方法将包含类名的类匹配为“整体”
  2. 使用__construct
  3. 替换类名称的函数

    <小时/> 在PHP

    <?php
    
    $class_regex = '~
            ^\s*class\s+
            (?P<class>\S+)[^{}]+(\{
            (?:[^{}]*|(?2))*
            \})~mx';
    
    $data = preg_replace_callback($class_regex, 
        function($match) {
            $function_regex = '~function\s+\K'.$match['class'].'~';
            return preg_replace($function_regex, '__construct', $match[0]);
        },
        $data);
    
    echo $data;
    ?>
    

    regex101.com和整个code on ideone.com上查看外部正则表达式的演示。