正则表达式在源代码中为php函数添加额外的参数

时间:2016-06-09 21:57:47

标签: python regex

我想使用正则表达式和Python为我的函数添加一个额外的参数。

我的功能如下:

mail(arg1, arg2, arg3, arg4);

任何人都可以帮助使用正则表达式来获得此结果:

mail(arg1, arg2, arg3, arg4, arg5);

我有一个总体想法:

import os, fnmatch

for path, dirs, files in os.walk(os.path.abspath('directory')):
        for filename in fnmatch.filter(files, '*.php'):
                filepath = os.path.join(path, filename)

                with open(filepath) as php:
                        i = php.read()
                i = i.sub(re, re, line)
                with open(filepath,"w") as f:
                        f.write(i)

2 个答案:

答案 0 :(得分:0)

假设您没有进行复杂的多行解析,并且您的参数不是带有空格或逗号的表达式,并且参数之间的空格是一致的,这里是一个天真的正则表达式:

re.sub(r'(mail\(\S+, \S+, \S+)\);', '\\1, arg4);', src)

您可能希望用\S+包围\s*\S+\s*,以便灵活地在每个参数周围留出空白。

它还将捕获可能命名为foomail的函数,因此您可能希望在表达式的开头添加必需的空格(r' (mail...')。这不会捕捉到行的开头,所以你还需要(r'^(mail...'

解析和正则表达式匹配是两个截然不同的学科。我理解有时候需要快速而又脏的东西来改变一堆代码,所以我希望这会有所帮助。

请务必先复制一份。

答案 1 :(得分:0)

我想提出一个与你要求的答案不同的答案。

考虑其他几种选择。假设第五个参数始终相同,则还有其他几种方法。

(1)写一个新的函数调用。我们称之为newmail

function newmail($arg1, $arg2, $arg3, $arg4) {
    return mail($arg1, $arg2, $arg3, $arg4, "My constant 5th argument");
}

现在将所有mail()次来电更改为newmail()

(2)使第五个参数成为现有mail()中的默认参数:

(这也可以在上面的解决方案(1)中完成)

function mail($arg1, $arg2, $arg3, $arg4, $arg5 = "My constant 5th argument") {
    [...]
}