Please consider the following code with which I'm trying to parse only the first phpDoc style comment (not using any other libraries) in a file (file contents put in $data variable for testing purposes):
请考虑以下代码,我试图仅解析文件中的第一个phpDoc样式注释(不使用任何其他库)(文件内容放在$ data变量中用于测试目的):
$data = "
/**
* @file A lot of info about this file
* Could even continue on the next line
* @author me@example.com
* @version 2010-05-01
* @todo do stuff...
*/
/**
* Comment bij functie bar()
* @param Array met dingen
*/
function bar($baz) {
echo $baz;
}
";
$data = trim(preg_replace('/\r?\n *\* */', ' ', $data));
preg_match_all('/@([a-z]+)\s+(.*?)\s*(?=$|@[a-z]+\s)/s', $data, $matches);
$info = array_combine($matches[1], $matches[2]);
print_r($info)
This almost works, except for the fact that everything after @todo (including the bar()
comment block and code) is considered the value of @todo
:
除了@todo之后的所有内容(包括bar()注释块和代码)被视为@todo的值之外,这几乎可以正常工作:
Array (
[file] => A lot of info about this file Could even continue on the next line
[author] => me@example.com
[version] => 2010-05-01
[todo] => do stuff... /
/** Comment bij functie bar()
[param] => Array met dingen /
function bar() {
echo ;
}
)
How does my code need to be altered so that only the first comment block is being parsed (in other words: parsing should stop after the first "*/" encountered?
我的代码是如何被修改的,以便只解析第一个注释块(换句话说:解析应该在遇到第一个“* /”之后停止?
1 个解决方案
#1
6
Writing a parser using PCRE will lead you to troubles. I would suggest to rely on the tokenizer or reflection first. Then it is safer to actually implement a parser for the doc block, which can handle all situations supported by the phpdoc format (what all libs ended to do as well).
使用PCRE编写解析器会导致麻烦。我建议先依靠tokenizer或反射。然后,为doc块实际实现一个解析器更安全,它可以处理phpdoc格式支持的所有情况(所有libs也要这样做)。
#1
6
Writing a parser using PCRE will lead you to troubles. I would suggest to rely on the tokenizer or reflection first. Then it is safer to actually implement a parser for the doc block, which can handle all situations supported by the phpdoc format (what all libs ended to do as well).
使用PCRE编写解析器会导致麻烦。我建议先依靠tokenizer或反射。然后,为doc块实际实现一个解析器更安全,它可以处理phpdoc格式支持的所有情况(所有libs也要这样做)。