Представьте, что у меня есть этот текст (я понимаю, что использование регулярных выражений для анализа HTML не является правильным решением ...)
<div><p>HELLO1</p>
<span>SPIDER</span></div>
<div><p>HELLO2</p>
<span>CHEESE</span></div>
<div><p>HELLO3</p>
<span>BANANA</span></div>
Я хочу сопоставить текст внутри <p>
и <span>
соответственно (это надуманный пример)
Я могу добиться этого, используя:
/<p>(.*?)<\/p>.*?<span>(.*?)<\/span>.*?<\/div>/gsmi
Однако я не хочу совпадать, если текст внутри диапазонаCHEESE
.Я пытался использовать отрицательный взгляд, например, так:
/<p>(.*?)<\/p>.*?<span>((?!CHEESE).*?)<\/span>.*?<\/div>/gsmi
Однако теперь это не то, что соответствует шаблону HELLO2
и BANANA
, где я хочу HELLO3
и BANANA
Я понимаю, что это потому, что я использую .*?
, но это требуется для реального решения.
Пример здесь: https://regex101.com/r/h4YgDm/3
КакМогу ли я сопоставить только весь шаблон, но все еще охватывающий несколько строк?