Совпадение многострочного PCRE до исключения - PullRequest
0 голосов
/ 30 марта 2020

Можно ли использовать регулярное выражение для генерации совпадений до тех пор, пока шаблон не будет разбит? в начале строки плюс остальная часть строки при условии строка начинается с *.

Если строка не начинается с *, не сопоставляйте цифры или остаток строки.

Заранее спасибо!

1 Ответ

1 голос
/ 30 марта 2020

Решение должно быть ( ссылка ):

(?m)\G(\d+)\s+\*(\w*.*)(?:[\n\r]+|$)

Однако ... В приведенном вами примере неправильный шаблон находится в первой строке, поскольку * нет в такой строке. Это приводит меня к выводу, что вы должны игнорировать все строки до первого матча. Если это ваша спецификация, то решение должно быть ( link ):

(?m)\A(?:\d+\s+[^*]\w*.*$[\n\r]*)*|\G(\d+)\s+\*(\w*.*)(?:[\n\r]+|$)

Этот расширенный шаблон регулярного выражения будет работать, даже если перед первым соответствием не будет прерванного шаблона.

Пожалуйста, имейте в виду, что первое совпадение этого решения должно быть проигнорировано, так как оно содержит эти игнорируемые строки перед первым совпадением, или оно пустое, если нет строк, которые необходимо игнорировать.


Ключом вышеупомянутых решений является использование \G, якоря, совпадающего в позиции, где закончилось предыдущее совпадение.

...