【发布时间】:2014-01-29 23:31:48
【问题描述】:
我需要用正则表达式解析 php docComment 注释。可能的注释:
/**
* @Annotation()
* @Annotation\Name("var1", "var2")
* @Annotation(["var1", "var2"], "var3")
* @Annotation\Filter\Name(["var1", "var2"], "var3", {"var4": "var5"})
*/
基本上是@Annotation(<json>)。在php中我像这样解码它json_decode('['.$json.']')
现在我使用正则表达式/@(\w+[\\\\\w+]*)\(([^\)]*)?\)/,但这并不总是正确的。例如:
@Annotation("name()")
我应该使用什么正则表达式?
是否可以在一行中解析多个注释?
/**
* @a() @b("var1")
* ....
*/
更新:
如何在正则表达式中编写:
# match annotation name
# if brackets are empty
# match ()[space|newline]
# (else) if something is in brackets
# match everything until:
# ")[space|newline]
# or })[space|newline]
# or ])[space|newline]
更新 2
这个正则表达式@((\w+)([\\\\\w+]*))(?:\(\s*\)|\((.*?["\}\]])(?:\s|$)*\))(?:\s|$)怎么样。可以简化吗?
【问题讨论】:
-
(?:@Annotation)([^(]+)*\((.+)(?=\))怎么样?例如,如果您想知道\Name或\Filter\Name,您可以使用 $2(第二个捕获组)访问 json,也可以选择使用 $1(第一个捕获组)。我认为不可能有像"name()"这样的内容并且在一行上有两个注释。此 RegEx 适用于您的内容类型,但不适用于多行注释。