我需要用正则表达式解析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)([^(]+)*\((.+)(?=\))
呢?你可以通过 $2 (第二个捕获组) 访问 json,并且如果你想知道\Name
或\Filter\Name
之类的内容,则可以使用 $1(第一个捕获组)。但我认为,在一行上有像 "name()" 这样的内容并且有两个注释是不可能的。这个正则表达式适用于您的内容类型,但不适用于多行注释。 - tenub