"Необязательный" конец строки $ literal (не жадный)
Я хотел бы сделать символ "конец строки" ($) "необязательным" (или не жадным). То есть я хочу захватить определенный паттерн в конце строки или ни одного. Это регулярное выражение, которое я построил:
(.+\s*)\s*(?:(\(\s*[xX\*]\s*\d+\s*\))|$)
Я хотел бы захватить такие вещи, как
Incompatible device (x10) ; Boot sequence aborted
То, что я хотел бы, чтобы иметь возможность захватить первую строку здесь (Несовместимое устройство (x10)), но если квантификатор (x10) не появляется, чтобы иметь возможность захватить только вторую (последовательность загрузки прервана, без (x##)
после этого). если я проверю шаблон на
boot sequence aborted
Это действительно захватывается, однако, если я тестирую его на всей приведенной выше строке, все захватывается, и мне нужна только часть "Несовместимое устройство".
1 ответ
Вы действительно близки: все, что вам нужно, это заменить .
, который соответствует любому символу, с [^;]
, как это:
([^;]+\s*)\s*(?:(\(\s*[xX\*]\s*\d+\s*\))|$)
Теперь ваше выражение будет захватывать первую часть, если (x10)
присутствует ( демо) или вторая часть, если она отсутствует ( демо).