我需要使用regexp解析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.']')
现在我使用regexp /@(\w+[\\\\\w+]*)\(([^\)]*)?\)/
但这并非总是如此。例如:
@Annotation("name()")
我应该使用什么样的正则表达式?
是否可以在行中解析多个注释?
/**
* @a() @b("var1")
* ....
*/
更新
如何在regexp中写这个:
# 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|$)
怎么样?可以简化吗?
答案 0 :(得分:3)
将其修改为:
@([\\\w]+)\((.*)\)
更新3
在一行中添加更多注释:
@([\\\w]+)\((.*?)\)(?:\s|$)
更新4
根据您的上一次修改:
@([\\\w]+)\((?:|(.*?[]"}]))\)