Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php注释正则表达式_Php_Regex_Json - Fatal编程技术网

Php注释正则表达式

Php注释正则表达式,php,regex,json,Php,Regex,Json,我需要用regexp解析php docComment注释。可能的注释: /** * @Annotation() * @Annotation\Name("var1", "var2") * @Annotation(["var1", "var2"], "var3") * @Annotation\Filter\Name(["var1", "var2"], "var3", {"var4": "var5"}) */ 基本上是@Annotation()。在php中,我像这样解码json\u dec

我需要用regexp解析php docComment注释。可能的注释:

/**
 * @Annotation()
 * @Annotation\Name("var1", "var2")
 * @Annotation(["var1", "var2"], "var3")
 * @Annotation\Filter\Name(["var1", "var2"], "var3", {"var4": "var5"})
 */
基本上是
@Annotation()
。在php中,我像这样解码
json\u decode('['.$json']')

现在我使用regexp
/@(\w+[\w+]*)\(([^\)]*)?\)/
,但这并不总是正确的。例如:

@Annotation("name()")
我应该使用什么regexp

是否可以分析行中的多个注释

/**
 * @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

这个regexp
@((\w+)([\w+])(?:\(\s*)\124;\(.*?[“\\]))(?:\ s$)*)(?:\s$)
)可以简化吗

将其修改为:

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

更新3

有关一行中的更多注释:

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

更新4

根据上次编辑:

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

@注释(“name@name.com“
将失败是否可以匹配
@注释(“name()”
@注释(”name@name.com)谢谢你的帮助。你的regexp几乎就是我想要的,但是
@Annotation(“name()”,“aaa”)
将失败。查看我的问题更新:)@Tomas检查我的更新。你不打算记住更多的东西吗?!;)谢谢@revo的时间和知识。你帮了我很多忙。
(?:@Annotation)([^(+)*\(.+)(?=\)
?你可以用$2(第二个捕获组)访问json,也可以选择使用$1(第一个捕获组)例如,如果您想知道
\Name
\Filter\Name
,我认为不可能有像
“Name()”
这样的内容,并且在一行上有两个批注。此正则表达式适用于您的内容类型,但不适用于多行批注。