Php注释正则表达式

时间:2014-01-10 20:21:26

标签: php regex json

我需要使用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|$)怎么样?可以简化吗?

demo

1 个答案:

答案 0 :(得分:3)

将其修改为:

@([\\\w]+)\((.*)\)

Live demo #1

更新3

在一行中添加更多注释:

@([\\\w]+)\((.*?)\)(?:\s|$)

Live demo #2

更新4

根据您的上一次修改:

@([\\\w]+)\((?:|(.*?[]"}]))\)

Live demo #3