我正在尝试从通过 ReflectionClass::getDocComment 检索到的文档块中解析自定义注释。我想将 preg_match_all 与"/(@\w+)\s+([^@]+)/"
带有PREG_SET_ORDER
标志的正则表达式一起使用会做我想要的。我在交互式外壳中对其进行了测试,它看起来很金黄。
我没想到要测试的是@author
来自 phpdoc 的标签。作者标签的可选电子邮件地址(显然)有一个@
。我不能\b
在正则表达式的字符类中使用要求@
be 在单词的开头,因为它不会被解释为单词边界字符而是退格。
我需要一些灵感!
更新:
谢谢 Arne,您的回答给了我一些想法,但我更喜欢通用解决方案,而不是仅适用于手头特定问题的解决方案。
到目前为止,我提出了两种可能性。第一个仅在当前存在尾随空格时才有效,但我不确定我能否保证总会有。第二个似乎无论如何都可以工作,但要少得多……精巧。
第一个正则表达式是"/(@\w+)\s+((?:[^@]\S*?\s+)*)/"
第二个正则表达式是"/(@\w+)\s+((?:[^@]\S*?(?:\s|$)+)*)/"
也许有人可以帮我清理第二个。