preg_match_all with windows / macOS9 行结尾

preg_match_all with windows / macOS9 line endings

我有以下代码来创建像

这样的小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 编码则无效。

想法?

感谢

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

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