Регулярное выражение смотрящее назад - чтоэто и как его сделать ?

dimonwebbb

Писатель
Регистрация
10 Фев 2017
Сообщения
7
Реакции
2
Зачем так все сложно-то? Строку разверни и все.
 

romas_s

Гуру форума
Регистрация
9 Ноя 2012
Сообщения
252
Реакции
78
Доброй ночи.

Нужно для программы сделать регулярное выражение, для поиска определенного фрагмента в html коде.
Сложность в том что код имеет похожую структуру, и поэтому надо использовать регулярное выражение смотрящее назад, что это с трудом представляю.

Пример кода схематично.

<a class="spin" lalal54agla </a></div>
<a class="spin" зззз45ззa </a></div>
<a class="spin" pppp5ggp </a></div><ul class="zuk">
<a class="spin" xezx455cg </a></div>
<a class="spin" htrdg45rh </a></div><ul class="zuk">
<a class="spin" lyy45yyyy </a></div>
<a class="spin" la5f45fff45 </a></div><ul class="zuk">

Нужно чтобы регулярка находила вот такие куски
<a class="spin" la5f45fff45 </a></div><ul class="zuk">
<a class="spin" htrdg45rh </a></div><ul class="zuk">
<a class="spin" pppp5ggp </a></div><ul class="zuk">

А вот такие не трогала:
<a class="spin" lalal54agla </a></div>
<a class="spin" зззз45ззa </a></div>
<a class="spin" lyy45yyyy </a></div>
<a class="spin" xezx455cg </a></div>
// <a class=\"spin\" - статическая часть кода
// (.*<\/div>) любое количество символов покуда не встретим </div>
// () скобки устанавливают ограничение диапазона поиска до </div>
// \ - нужен для перевода спец символов в текст таких как " / \ .
// <ul class=\"zuk\"> - статическая часть кода
$reg = "/<a class=\"spin\"(.*<\/div>)<ul class=\"zuk\">/i";

регулярное выражение ищет код который начинается с <a class="spin" далее любой набор символов до первого встречного </div>, затем проверяется наличие <ul class="zuk">
если убрать проверку наличие </div> - то любым символом будут считаться все последующие строки, покуда не встретим <ul class="zuk"> и регулярка будет работать не корректно.


Зачем так все сложно-то? Строку разверни и все.

что значит строку разверни??
 
Последнее редактирование:

NickSan

Постоялец
Регистрация
23 Авг 2012
Сообщения
68
Реакции
44
Спасибо, но нужен захват от "<ul class="zuk">" , до ближайшего "<a", в левую сторону (то есть "назад" до первого встретившегося текста" <a")
положи строку посимвольно в массив и обработай с конца до начала %)

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

romas_s

Гуру форума
Регистрация
9 Ноя 2012
Сообщения
252
Реакции
78
положи строку посимвольно в массив и обработай с конца до начала %)

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

для начала выложи код целиком, с которого нужно выбрать часть кода.

открой 1 пост и по аналогии выложи что нужно.
 

TopReseller

Постоялец
Регистрация
30 Июл 2011
Сообщения
337
Реакции
131
Я б вот так написал
<a class="spin" [^>]*? <\/a><\/div><ul class="zuk">
 

NickSan

Постоялец
Регистрация
23 Авг 2012
Сообщения
68
Реакции
44
для начала выложи код целиком, с которого нужно выбрать часть кода.

открой 1 пост и по аналогии выложи что нужно.
Видимо код настолько "засекречен", что даже помочь толком не сможем... По теме уже на все вопросы автора ответили, на сколько я вижу.
 
Сверху