"Необязательный" конец строки $ 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) присутствует ( демо) или вторая часть, если она отсутствует ( демо).

Другие вопросы по тегам