|
|
|
| Всем привет, помогите составить регулярку.
Нужно вытащить текст из любых заголовков html (h1-h5)
При этом в заголовках могут быть любые другие теги.
К примеру:
<h1>Текст</h1> => Текст
<h1><a href="#">Текст</a></h1> => Текст
<h1><a href="#"><b>Текст1</b></a><a href="#">Текст2</a>Текст3</h1> => Текст1, Текст2, Текст3
|
Ну и так далее, т.е. нужен любой текст в заголовках h1 или из любых тегов в этих заголовках.
Вложенность может быть любой, это и ставит меня в ступор)
На данный момент есть это:
"/<h[1-9]{1}.*>(.*)<\/h[1-9]{1}>/isU" - парсит любой текст из заголовков, теги в том числе.
Можно конечно после применения этой регулярки вторым проходам вырезать все теги, но хотелось бы одним выражением!) | |
|
|
|
|
|
|
|
для: alver
(25.08.2011 в 08:55)
| | Лучше для каждого вида тэгов создать свое регулярное выражение, а вместо (.*) использовать (.*?). Семантически заголовки не вкладывают друг в друга, но вообще это не запрещено. | |
|
|
|
|
|
|
|
для: cheops
(25.08.2011 в 10:26)
| | Заголовки то не вкладываются, но например подобные выражения:
<h1><a href="">Текст</a></h1>=>Текст
|
встречается регулярно.
Для каждого вида тегов имеете ввиду внутри заголовков? | |
|
|
|
|
|
|
|
для: alver
(25.08.2011 в 11:17)
| | думал, думал, но ничё толкового не придумал, остановился на таком варианте:
|<h[1-5].*?>(?:(?:<[^<>]+?>)*([\wа-яА-Я]+)(?:<[^<>]+?>)*)+</h[1-5]>|
|
текст:
<h1>Текст</h1>
<h3><a href="#">Текст</a></h3>
<h4 style="text-align:center"><a href="#">Текст</a></h4>
<h1><a href="#"><b>Текст1</b></a><a href="#">Текст2</a>Текст3</h1>
|
результат:
Всего совпадений 4
1 : <h1>Текст</h1>
1.1 : Текст
2 : <h3><a href="#">Текст</a></h3>
2.1 : Текст
3 : <h4 style="text-align:center"><a href="#">Текст</a></h4>
3.1 : Текст
4 : <h1><a href="#"><b>Текст1</b></a><a href="#">Текст2</a>Текст3</h1>
4.1 : Текст3
| с 4-ой строкой получается облом((
_____________
хотя можно получить всё содержимое заголовков ( |<h[1-5].*?>(.+?)</h[1-5]>| ), а потом пропустить через strip_tags | |
|
|
|
|
|
|
|
для: f111
(25.08.2011 в 23:44)
| | Хм. Спасибо. Получше моего варианта!)
У меня вот тоже со строками, подобной 4-ой - никак!
Видимо, в такой ситуации придётся в 2 этапа обрабатывать.
Нужно максимум данных выцепить!) | |
|
|
|
|
|
|
|
для: cheops
(25.08.2011 в 10:26)
| | >а вместо (.*) использовать (.*?).
в его предложенном варианте и так не жадные квантификаторы | |
|
|
|