1

我需要一种在 PHP 中使用正则表达式找到方法/函数结尾的方法。但我想知道这是否可能。

一个函数显然总是以右括号结尾},但也是如此if/else,语句for等等while......

有没有办法用正则表达式查找和替换函数的最后一个括号?

所以我应该能够替换以下内容:

public function func1 ( $someParam )
{
    if ( $someParam ) {

    }
    else {

    }
}

对此:

public function func1 ( $someParam )
{
    if ( $someParam ) {

    }
    else {

    }

}]; // <-- note the square bracket and semi-colon
4

1 回答 1

3

正则表达式是不适合这项工作的工具。正则表达式将无法处理所有各种嵌套级别以及您可能在函数中找到的大量内容。正如 mario 和 Matt Lo 在上述评论中所建议的那样,您需要使用解析文本并确定代码真实结构的东西。

PHP 不是一种应该用正则表达式解析的常规语言,它在 BNF 中,应该这样解析。(我的意思是,你可以使用正则表达式,但你正在为自己设置一个糟糕的时间。如果你喜欢的话,你也可以用小猫来命名你的所有变量。)

发布的tokenizer mario 可能是您最好的选择,因为它将代码移动到语法树中,然后您可以将树转换回代码。如果您在使用它时遇到问题,请务必跟进一个新问题。我相信那个图书馆的作者仍然活跃在这个网站上。

于 2012-11-17T19:38:05.293 回答