- var_dump: documentation ( source)
- preg_match_all: documentation ( source)
<?php
$regex = <<<REGEX
/
(?:\A|\n)\s*
(?:(@[\pL-_\\]+)\ *(\()([^\)]*)(\)))|
(?:
(?:
(?:(@author)\ +([^<]+)(?:(\<)(.+?)(\>))?)|
(@api)|
(@category\ +([^ ]+))|
(@copyright)|
(@deprecated)|
(@example\ +([^ ]+))|
(@filesource)|
(@global\ +([^ ]+))|
(@ignore)|
(@internal)|
(@license\ +([^ ]+))|
(?:(@link)\ +([^ ]+))|
(@method)|
(@package\ +([^ ]+))|
(@param\ +([^ ]+)\ +([^ ]+))|
(@property\ +([^ ]+)\ +([^ ]+))|
(@property-read\ +([^ ]+)\ +([^ ]+))|
(@property-write\ +([^ ]+)\ +([^ ]+))|
(@return\ +([^ ]+))|
(?:(@see)\ +([^ ]+))|
(@since\ +([^ ]+))|
(@source)|
(@subpackage\ +([^ ]+))|
(@throws\ +([^ ]+))|
(@todo)|
(@uses\ +([^ ]+))|
(@var\ +([^ ]+))|
(@version\ +([^ ]+))|
(@[\pL-_]+)
)
\ +
(?s:(.*?))
)
(?=\n\s*@|\Z)
/ux
REGEX;
$comment = <<<COMMENT
@ORM\Type(name="")
@see MyTag this is a @description
that spans multiple lines
@internal
@author Mike van Riel <me@mikevanriel.com>
COMMENT;
var_dump(preg_match_all($regex, $comment, $matches, PREG_SET_ORDER));
var_dump($matches);