3

基本上我正在阅读文档块中的自定义注释

/**
 * This exception is thrown when no constant function is found.
 *
 * @author     Time.ly Network Inc.
 * @since      2.0
 *
 * @instantiator Ai1ec_View_Factory Category_Exception
 * @package    AI1EC
 * @subpackage AI1EC.Config
 */
class Ai1ec_Constants_Not_Set_Exception extends Ai1ec_Exception {
}

我得到了 docblock,然后尝试用

 $r = new ReflectionClass($tokens[$i][1]);
 $doc = $r->getDocComment();
 preg_match_all('#^.*.@instantiator\s+(.*?)\n#s', $doc, $annotations);

这实际上是有效的,但不是最佳的。我试过了

 preg_match_all('#^\s\\*\s?@instantiator\s+(.*?)\n#s', $doc, $annotations);

说匹配一个空格,一个星形,零个或一个空格@instantiator 一个或多个空格,然后得到任何东西直到行尾,但它不起作用,没有匹配。另外,我如何在正则表达式的行尾修剪任何最终的空格?

4

1 回答 1

3

你不需要s标志,也不需要双重转义,试试这个正则表达式:

preg_match_all('#^\s*[*]\s*@instantiator\s+(.*)$#im', $doc, $annotations);

演示:http: //3v4l.org/cCGbg

于 2013-11-07T21:45:15.687 回答