import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?<=^|\\v)\n"
+ "\\h*+\\*\\h*+\n"
+ "(?:\n"
+ " (?:\n"
+ " (?P<annotation>\n"
+ " @(?P<name>\\w++)\n"
+ " (?:\n"
+ " (?<=@param)\\h++(?P<type>\\w++(?:\\[\\])?)\\h++\\$(?P<variable>\\w++)\n"
+ " |(?<=@return)\\h++(?P<type>\\w++(?:\\[\\])?)\n"
+ " |(?<=@throws)\\h++(?P<class>\\w++)\n"
+ " |(?<=@cache)\\h++(?P<time>\\d++)\n"
+ " |(?<=@roles)\\h++(?P<roles>\\w++(?:\\h*+,\\h*+\\w++)*)\n"
+ " )?\n"
+ " )\n"
+ " )\n"
+ " (?P<comment>\\h++[^\\v]++)?\n"
+ " (?:(?P<comment>\\v)\\h*+\\*\\h*+(?P<comment>[^\\v@\\h\\*][^\\v]++))*+\n"
+ " |(?P<description>(?:[^\\v@\\h\\*][^\\v]++)\n"
+ " (?:\n"
+ " \\v\\h*+\\*\\h*+[^\\v@\\h\\*][^\\v]++\n"
+ " )*+\n"
+ " )\n"
+ ") ";
final String string = "/**\n"
+ " * bla bla \n"
+ " *bla2 @ bla2 @\n"
+ " *\n"
+ " * bla bla 3\n"
+ " *\n"
+ " * @olivier voila\n"
+ " * @param string $sku1 bidule\n"
+ " *\n"
+ " * @param string[] $sku2\n"
+ " *\n"
+ " * @param string $sku3 toto bidule @\n"
+ " * machin truc\n"
+ " *\n"
+ " * @param string $sku4\n"
+ " * machin truc\n"
+ " *\n"
+ " * @deprecated\n"
+ " *\n"
+ " * @deprecated toto\n"
+ " *\n"
+ " * @throws Exception\n"
+ " * @throws Exception\n"
+ " * machin\n"
+ " * @return Cfe_Type_Product\n"
+ " * @cache 3600\n"
+ " * @roles toto, titi,truc , machin\n"
+ " */";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS | Pattern.DOTALL);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html