регулярное выражение: совпадать как можно больше до следующего совпадения - PullRequest
0 голосов
/ 26 мая 2020

Мое регулярное выражение до сих пор: <h1>(.*?)<\/h1>(.*?)(?:<h1>)?

Моя тестовая строка: <h1>Foo</h1><h2>Bar</h2><h1>Baz</h1><h3>Test</h3><h1>ghj</h1>zuio

Прямо сейчас часть (.*?) соответствует самой короткой возможной строке, но на самом деле я хочу что он соответствует всему до следующего совпадения (имеется в виду для первого совпадения: <h2>Bar</h2>, для второго <h3>Test</h3> и так далее (подчеркнуто на рисунке ниже)).

Кто-нибудь может мне помочь?

Изображение матча на: https://regex101.com/

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

<h1>(.*?)<\/h1>((?!<h1>))*

скрипка: https://regex101.com/r/6sNe0b/5

Das funktioniert jetzt so w ie es soll. Trotzdem danke für alle d ie mit drüber nachgedacht haben.

0 голосов
/ 26 мая 2020
(?<=<h1>)(.+?)(?=<h1>)

Это захватывает все, что находится перед следующим элементом «h1», но вы можете расширить его, чтобы извлечь только поля.

Это захватывает каждое поле в списке. Можно смешать 2, чтобы получить группы, начинающиеся с h1:

(?<=<h\d>)(.+?)(?:<\/h\d>)(?=<h\d>)
...