我想解析通过ReflectionClass :: getDocComment检索到的文档块的自定义注释。我认为使用preg_match_all与正则表达式"/(@\w+)\s+([^@]+)/"
与PREG_SET_ORDER
标志将做我想要的。我在一个交互式shell中测试它,它看起来很棒。PCRE正则表达式看起来像一个注释的字符串
我不认为要测试的是来自phpdoc的@author
标记。作者标签的可选电子邮件地址(显然)中有一个@
。我不能在正则表达式的字符类中使用\b
来要求@
位于单词的开头,因为它不会被解释为单词边界字符而是退格。
我需要一些灵感!
更新:
谢谢阿恩,你的回答给了我一些想法,但我更喜欢一个只在手适应于具体问题的通用解决方案。
到目前为止我已经提出了两种可能性。第一个只有当前存在尾部空间时才起作用,但我不确定总会有保证。第二个似乎工作,无论如何,但少得多......愉快。
第一正则表达式是"/(@\w+)\s+((?:[^@]\S*?\s+)*)/"
二正则表达式是"/(@\w+)\s+((?:[^@]\S*?(?:\s|$)+)*)/"
也许有人可以帮我清理第二个。
感谢您为什么'\ b'在字符类中不起作用的解释。同样在破译你的建议时,我学会了抑制一个我以前没有遇到的捕获,这真是太棒了=) – Matt 2012-07-26 03:44:55