正则表达式捕获特定函数之间的代码

时间:2011-02-22 04:33:13

标签: python regex

我一直在尝试使用python,尝试捕获特定函数之间的特定变量。为了说明,让我举一个php文件的文件内容示例: -

public function executeSomething ()
{        
    $this->title =  'Edit something';
    $this->action = 'Edit';
    $this->headerTitle = 'Edit something';

    return true;
}

public function executeSomethingEdit ()
{

    if (strlen ($this->somethingElse) > 0)
    {
        $this->titleText = "Update";    
        $title = 'Edit something';
    }
    else
    {
        $this->titleText = "Create";    
        $title = 'Create something';
    }

    $this->title =  $title;   
    $this->headerTitle = $title; 
    $this->formTitle = 'Something details'

    return true;
}

python脚本现在需要做的是遍历此文件以搜索以“public function execute”开头的函数并获取大括号内的内容,即{}。我已经想出了python代码来实现这一点,即:

 r = re.compile(r"public function execute(.*?)\(\).*?{(.*?)}", re.DOTALL)

当我在函数中进行验证时会出现问题,即if else语句,例如函数executeSomethingEdit中的语句。该脚本没有考虑if语句关闭大括号'}'下面的任何代码。因此,我需要进一步增强python代码以包含下面的函数声明,如下所示: -

r = re.compile(r"public function execute(.*?)\(\).*?{(.*?)}.*?public function", re.DOTALL)

目前此代码无效/产生我想要的结果。我需要特别使用python,因为我需要进一步分析{(。*?)}的内容。我对python很陌生,所以我希望有人可以指引我朝着正确的方向前进,或者至少告诉我我做错了什么。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果输入PHP没有错误并且具有一致的缩进,则可以在右大括号之前检查非空格字符。

r = re.compile(r'public function execute(.*?)\(\).*?{(.*?)[^ ]}', re.DOTALL)