PHP正则表达式和DocComment值解析

时间:2015-03-26 23:03:15

标签: php

我正在尝试解析doc block comment

的值
$str = "/**
 * @title View/List Permissions
 * @description Allow user to view list of permissions
 */";

我正在使用的代码如下所示:

$re = "/^.*@title\s+(\S*).*@description\s+(\S*).*$/s"; 
preg_match($re, $str, $matches);

目前的结果如下:

[0] View/List
[1] Allow

https://regex101.com/r/dA7jW2/2

如何获取“查看/列出权限”和“允许用户查看权限列表”?

我试图通过将\ s +(\ S *)。*替换为\ s +(\ S. *)来修改正则表达式,虽然它在某种程度上起作用,但它是从下一行添加*

https://regex101.com/r/dA7jW2/3

任何想法都会有所帮助..

由于

2 个答案:

答案 0 :(得分:0)

尝试

/^.*@title\s+(.*)\s*\*\s*@description\s+(.*).*$/s

您遇到的问题是:

1)当你执行(\S*)时,它会在你到达的第一个空白字符后停止(在这种情况下是一个空格),所以你需要(.*)

2)你需要在" Permissions"之后处理任意数量的间距。 (空格或返回字符),后跟*,然后是" @ description"

之前的任何其他空格

希望有所帮助

答案 1 :(得分:0)

我将\S更改为[^\n],并将其余字符串与该行的末尾相匹配。

^.*@title\s+([^\n]*).*@description\s+([^\n]*).*$

输出:

MATCH 1
1.  [14-35] `View/List Permissions`
2.  [52-90] `Allow user to view list of permissions`

https://regex101.com/r/dA7jW2/4

[^]是一个负面字符类,因此您可以列出您不想匹配的所有字符。 [^\n]表示匹配字符不是新行。