import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "[^\\w](?<!->)(trans|trans_choice|Lang::get|Lang::choice|Lang::trans|Lang::transChoice|@lang|@choice|__)\\s*\\(\\s*((?<![\\\\])['\"])((?:.(?!(?<![\\\\])\\2))*.?)\\2\\s*[,\\)]";
final String string = "Should match variations on method:\n"
+ "trans('a.b');\n"
+ "trans_choice('a.b')\n"
+ "Lang::get('a.b');\n"
+ "Lang::choice('a.b', 1);\n"
+ "Lang::trans('a.b');\n"
+ "Lang::transChoice('a.b', 2);\n"
+ "@lang('language.line')\n"
+ "@choice('language.line', 1);\n"
+ "__('a.b')\n\n"
+ "Should match variations of contained string\n"
+ "trans('key'); // No group, so JSON style\n"
+ "__('Json string')\n"
+ "trans('a.b');\n"
+ "trans('a.b.c');\n"
+ "trans('a_b.c-d');\n"
+ "trans('a.b!');\n"
+ "trans('a.translate me!');\n"
+ "trans('a.über~');\n"
+ "trans(\"app.i'm\"); // contained quote of different type\n"
+ "trans('app.\"ok\"');\n"
+ "trans('with contained \" quotes');\n"
+ "trans('with an escaped \\' quote')\n"
+ "trans('with a double \\\\')\n\n"
+ "Should match additional variables and whitespace\n"
+ "trans('a.b', [1,2]);\n"
+ "trans ( \n"
+ " ' with whitespace ' , $var)\n\n"
+ "Typical use cases\n"
+ "(trans ( 'lang.line'));\n"
+ "<span>@lang('lang.line')</span>\n\n"
+ "Should not match:\n"
+ "trans($var); // No quotes\n"
+ "trans(); // Nothing\n"
+ "anytrans('group.key'); // not the method we need\n"
+ "1trans('lang.file'); // not the method\n"
+ "_trans('lang.file'); // not the method\n"
+ "->trans('lang.line');\n"
+ "trans(\\'why do we have an escaped quote here?\\')\n"
+ "trans('with a triple \\\\\\') <-- fail!\n"
+ "trans('lang.line' . $middle); // concatenated vars\n"
+ "trans('lang.line' . $middle . '.ending'); // concatenated vars\n"
+ "___('hello') // not the method we need\n";
final Pattern pattern = Pattern.compile(regex);
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