Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание массива по тегам <h3>
 
 автор: vastvision   (16.04.2010 в 15:25)   письмо автору
 
 

Помогите пожалуйста!

Есть такой текст:

<h3>Группа 1</h3> Какой то текст принадлежащий группе 1
<h3>Группа 2</h3> Какой то текст принадлежащий группе 2
<h3>Группа 3</h3> Какой то текст принадлежащий группе 3
<h3>Группа 4</h3> Какой то текст принадлежащий группе 4

Нужно сделать массив каждый элемент которого соответствовал бы единственной приведённой выше строчке.
Т.е.
[0] - <h3> .... </h3> .....
[1] - <h3> .... </h3> .....

я написал:

[^<\/h3>]*<h3>.*<\/h3>[^<h3>]*


получается:

0: <h3>Группа 1</h3> Какой то текст принадлежащий группе 1
1: <h3>Группа 2</h3> Какой то текст принадлежащий группе 2
2: <h3>Группа 3</h3> Какой то текст принадлежащий группе
3: <h3>Группа 4</h3> Какой то текст принадлежащий группе 4

Надо как то показать что после </h3> идёт текст ( .* ) а потом не должно быть открывающегося тега <h3> что если он есть это уже в новый элемент массива надо пихать, т.е. [^<h3>]* эта конструкция в конце не правильная, она воспринимается как список символов <, h, 3, >, а надо что бы строгая последовательность была, цельная, именно <h3>, а то как я написал он там и <br> выкидывает, короче муть.

  Ответить  
 
 автор: big-trot   (16.04.2010 в 22:19)   письмо автору
 
   для: vastvision   (16.04.2010 в 15:25)
 


$str = "<h3>Группа 1</h3> Какой то текст принадлежащий группе 1
<h3>Группа 2</h3> Какой то текст принадлежащий группе 2
<h3>Группа 3</h3> Какой то текст принадлежащий группе 3
<h3>Группа 4</h3> Какой то текст принадлежащий группе 4";

preg_match_all("|<h3>(?:(?!<\/h3>).)*<\/h3>[^<]*|ism",$str,$arr);

print_r($arr);

  Ответить  
 
 автор: vastvision   (17.04.2010 в 16:14)   письмо автору
 
   для: big-trot   (16.04.2010 в 22:19)
 

Спасибо. Почти то что нужно, проблема в том что после </h3> есть ещё теги и вот эта конструкция мешает: [^<]*, т.е. обрезка идёт до символа < , а надо именно до нового <h3>, потому что после заголовка (ну <h3></h3>) идут ещё дивы и <b>, <em>...

  Ответить  
 
 автор: vastvision   (17.04.2010 в 16:47)   письмо автору
 
   для: vastvision   (17.04.2010 в 16:14)
 

$val = str_replace('<h3>', '@@@<h3>', $val);
$val = $val . '@@@';
$res = preg_match_all("|(<h3>.*?</h3>.*?)@@@|i", $val, $mass, PREG_PATTERN_ORDER);

  Ответить  
 
 автор: big-trot   (17.04.2010 в 17:47)   письмо автору
 
   для: vastvision   (17.04.2010 в 16:47)
 

<h3>(?:(?!<\/h3>).)*<\/h3>(?:(?!<h3>).)*

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования