В предыдущем ответе он использовал #?
в качестве разделителя. Здесь вы пишете \*?
, что означает совпадение *
буквально или ничего. .*?
будет соответствовать чему-либо до :
. Это означает, что произойдет многократная замена и удаление чего угодно до двоеточия (в комплекте). В вашей замененной строке должно быть несколько ;
.
Шаблон, который я вижу:
* (...) : ... comment 1<br/>
С <br/>
необязательно.
Таким образом, попробуйте регулярное выражение вроде:
\* \([^)]*\) : ((?:.*?)comment \d+)(?:<br/>)?
Обратите внимание, что (?: ... )
делает регулярное выражение в скобках не группирующимся. Вы можете проверить результат на http://rubular.com/r/orViHMJEMr
Приведенное здесь регулярное выражение позволяет вам получить комментарии.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestRegex {
public static void main(String[] args) {
String pattern_string = "\\* \\([^)]*\\) : ((?:.*?)comment \\d+)(?:<br/>)?";
String input_string = "* (20-01-2012 12:53) : ---- comment 3<br/>* (20-01-2012 12:50) : comment 2<br/>* (20-01-2012 12:50) : comment 1";
Pattern pattern = Pattern.compile(pattern_string);
Matcher matcher = pattern.matcher(input_string);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
}