Я пытаюсь сопоставить строку, которая состоит из HTML. По сути, это галерея изображений, поэтому в строке много общего. В строке много тегов <dl>
, но я ищу, чтобы соответствовать последней комбинации <dl>(.?)+</dl>
, которая предшествует </div>
.
Способ, который я разработал для этого, - убедиться, что в комбо <dl></dl>
, которое я сопоставляю, нет никаких <dl
. Мне все равно, что там еще, включая другие теги и разрывы строк.
Я решил, что мне нужно сделать это с помощью регулярных выражений, потому что я не могу предсказать, какой длины будет эта подстрока или что-то внутри нее.
Вот мое текущее регулярное выражение, которое возвращает мне массив только с двумя значениями NULL:
preg_match_all('/<dl((?!<dl).)+<\/dl>(?=<\/div>)/', $foo, $bar)
Как вы можете видеть, я использую отрицательный взгляд, чтобы попытаться увидеть, есть ли еще один <dl>
в этом. Я также пробовал негативно смотреть здесь с теми же результатами. Я также попытался использовать +?
вместо +
безрезультатно. Имейте в виду, что здесь нет шаблона <dl><dl></dl>
или чего-либо еще, но мое регулярное выражение либо соответствует первому <dl>
и последнему </dl>
, либо вообще ничего.
Теперь я понимаю, что .
не будет соответствовать разрывам строк, но я попробовал все, что мог себе представить, и он по-прежнему либо дает мне значения NULL, либо почти всю строку (с самого первого появления <dl
). до </dl></div>
, который включает в себя несколько других случаев <dl>
, именно то, что я не хотел). Честно говоря, я не знаю, что делаю неправильно.
Спасибо за вашу помощь! Я потратил больше часа, пытаясь решить эту проблему, и это заставило меня выдернуть волосы.