preg_match_all与windows / macOS9行结尾

时间:2015-03-02 23:18:47

标签: php preg-match line-breaks

我有以下代码来创建像

这样的小doxygen
public function parserAction () {

    $code = file_get_contents('/www/htdocs/rumpho/application/controllers/parserStr.php');

    preg_match_all ( '/(private|public)?\s*function\s*(.*?)\s*\((.*?)\)\s*{(?:\n|\t|$)*(?:\/\*\*((?:\n|.|\t)*?)\*\/)?/msi', $code, $matches );

    var_dump( $matches );

    die;

}

当parserStr.php的行结尾使用unix进行编码时,它会起作用,但如果使用Windows或MacOS9对行结尾进行编码,则它不起作用。

想法?

THX

1 个答案:

答案 0 :(得分:2)

您想要的特殊字符\R\n\r\r\n匹配。然后你的正则表达式成为:

preg_match_all ( '/(private|public)?\s*function\s*(.*?)\s*\((.*?)\)\s*{(?:\R|\t|$)*(?:\/\*\*((?:\R|.|\t)*?)\*\/)?/msi', $code, $matches );
//                                                                 here __^^              and __^^