我正在尝试解析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
任何想法都会有所帮助..
由于
答案 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]
表示匹配字符不是新行。