Я пробовал это с не жадными операторами, но это не сработает.Я бы попытался отойти от того, чтобы регулярное выражение whole соответствовало именно тому, что вы хотите, и вместо этого использовал бы группы.Затем вы можете просто написать средство сопоставления, соответствующее любому числу этих P.1
конструкций, и это значительно упростит ваш поиск строки Client
в конце, потому что вам не нужно пытаться сделать это в качестве заглядывания.Таким образом:
String x = "P.1 P.2 P.3 P.4 foobar Client :";
Pattern p = Pattern.compile("((P\\.\\d)(.*(P\\.\\d))*)+(?<result>.*)Client");
Matcher m = p.matcher(x);
System.out.println(m.find());
System.out.println(m.group("result"));
Кажется, производит именно то, что вы хотите.Синтаксис (?<whatever>REGEX HERE)
является регулярным выражением для: Позвольте мне взять этот бит чуть позже, попросив группу «что угодно».