^There was a problem at (.*?)(?:, previous failures were (.*))?$
(.*?)
означает совпадать со всеми, но сопоставлять как можно меньше, чтобы совпадение совпадало. Якоря ^
и $
заставляют регулярное выражение охватывать всю строку, чтобы оно всегда совпадало с чем-либо.
РЕДАКТИРОВАТЬ: Если вам действительно нужен окружающий текст ошибки, а не только "XXX" и "YYY", используйте вместо этого следующее регулярное выражение:
^There was a problem at (.*?)(, previous failures were .*)?$
РЕДАКТИРОВАТЬ 2: В зависимости от формата XXX, вы можете избежать следующих действий, но только если в «XXX» нет запятых. К сожалению, кроме этого, вам нужно как минимум $
якорь, чтобы убедиться, что не жадное совпадение будет что-то совпадать. Как вы отметили в своем вопросе, использование жадного совпадения вообще не вариант (при использовании .
по крайней мере).
There was a problem at ([^,]*)(, previous failures were .*)?