Доработать регулярку. Парсинг

Статус
В этой теме нельзя размещать новые ответы.

antidote

Профессор
Регистрация
21 Янв 2008
Сообщения
167
Реакции
42
Есть текст такой
HTML:
<a target="_blank" href= 
"/someplace/121354-pathname.html"> 
  <div style="display: inline!important;">«Наши слоны самые слонистые слоны»
  </div> 
</ a >
Надо сделать выборку всего что находится между <a href...> и </a> при условии что между ними:
1. есть только заданые теги (например div,span,font)
2. нет заданых тегов (допустим table,img)
Доработайте плиз кто-то, никак не могу.:confused:
Код:
#<a\b[^>]*href\s*=\s*([\"\'])([[:alnum:]-/\.]*)\1[^>]*>
(.*)
<\s*/\s*a\s*>#sxiu
 
Текст, в котором
Код:
1) (?:</?(?:b|i)\b[^>]*>|[^<>])*
2) (?:</?(?!(?:i|b))[a-z_][^>]*>|[^<>])*
А вообще div, table не может быть в ссылке.
 
А достать анкор и потом проверить средствами языка содержимое образование не позволяет? Регулярные выражения - это не круто, особенно когда через 2 дня сам хрен поймешь что оно делает
 
Текст, в котором
А вообще div, table не может быть в ссылке.

Ух-ты, но я парсю такой код.
HTML:
<a href="URL"><div style="display:block;">Текст</div></a>
Да и вопрос заключается для понимания самого принципа, а не тупой вставки в код. Все еще будет усложняться и переделываться.


А достать анкор и потом проверить средствами языка содержимое образование не позволяет? Регулярные выражения - это не круто, особенно когда через 2 дня сам хрен поймешь что оно делает
Позволяет, даже очень. Но зачем делать такое, если все равно уже регексп использую. ИМХО не логично.

UPD:
Эммм, наверно чуть не так выразился. Можно ли сделать так, чтоб эти условия были прямо в той же регулярке??
Код:
#<a\b[^>]*href\s*=\s*([\"\'])([[:alnum:]-/\.]*)\1[^>]*>
(.*)
<\s*/\s*a\s*>#sxiu
т.е. там где сейчас стоит (.*) должно проверяться условие что между тегами <a ..>..</a> гарантировано нет <img или <div. Возможна вложеность тегов. Далее я смотрю на длину 3-го (вроде правильно посчитал) совпадения, и ежели она не нулевая решаю что делать.
 
Ух-ты, но я парсю такой код.
HTML:
<a href="URL"><div style="display:block;">Текст</div></a>

Порочти стандарт, не любой тег может размещатся в любом, а даже наоборот, есть правила размещения тегов. А такое написание, особенно без каких-то исключительных причин, чревато только ошибками.


особенно когда через 2 дня сам хрен поймешь что оно делает
Особенно когда изначально не знаешь:)
 
Ну да, дали вот регулярки прямо из коробки и каждый уважающий себя быдлокодер пытается ними делать все, что связано со строками, и вот хер кто знает про domdocument и xpath
 
Можно ли сделать так, чтоб эти условия были прямо в той же регулярке??
Да, можно, если очень сильно хочется. Но решение кривое и не всегда сможет корректно работаеть, т.к. не может учитывать все особенности синтаксиса.
Код:
#<a\b[^>]*href\s*=\s*([\"\'])([[:alnum:]-/\.]*)\1[^>]*>
((?:.(?!<img|<div))*)
<\s*/\s*a\s*>#sxiu
Возможна вложеность тегов.
Если нужно проверять вложенность, уровни вложенности и т.п., здесь регулярки безсильны вообще, куда проще написать конечный автомат для разбора.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху