Php annotation regexp
json, php, regex
Solution
Modify it to:
@([\\\w]+)\((.*)\)
Live demo #1
Update 3
For more annotations in one line:
@([\\\w]+)\((.*?)\)(?:\s|$)
Live demo #2
Update 4
Based on your last edit:
@([\\\w]+)\((?:|(.*?[]"}]))\)
Live demo #3
Problem
I need to parse php docComment annotations with regexp. Possible annotations: ``` /** * @Annotation() * @Annotation\Name("var1", "var2") * @Annotation(["var1", "var2"], "var3") * @Annotation\Filter\Name(["var1", "var2"], "var3", {"var4": "var5"}) */ ``` Basically `@Annotation(<json>)`. In php I decode it like this `json_decode('['.$json.']')` Now I use regexp `/@(\w+[\\\\\w+]*)\(([^\)]*)?\)/` but this is not always true. For example: ``` @Annotation("name()") ``` What regexp should I use? Is it possible to parse more than one annotation in the line? ``` /** * @a() @b("var1") * .... */ ``` UPDATE: How to write this in 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] ``` UPDATE 2 What about this regexp `@((\w+)([\\\\\w+]*))(?:\(\s*\)|\((.*?["\}\]])(?:\s|$)*\))(?:\s|$)`. Can it be simplified? demo