Попробуйте это:
String input = "hello this.is.a.test(MainActivity.java:47) (and some more text)";
Pattern p = Pattern.compile("[^\\)]*\\(([^\\)]*)\\).*");
Matcher m = p.matcher( input );
if(m.matches()) {
System.out.println(m.group( 1 )); //output: MainActivity.java:47
}
Это также находит первый вхождение текста между (и), если их больше.
Обратите внимание, что в Java вы обычно заключаете выражения в неявно (* по крайней мере, с тем же эффектом), заключенные в ^
и $
, то есть регулярное выражение должно соответствовать всей входной строке. Таким образом, [^\\)]*
в начале и .*
в конце необходимы.