yakoval
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем привет! Нужно из текста Код: <div>block text 1</div><b>link</b> <div>block text 2</div><i>italic</i> <div>block text 3</div><b>link</b> | Получить значения из блоков, после которых идет жирный текст, т.е. Код: <div>{Этот текст}</div><b>link</b> | Мой код: Код: <?php $str = ' <div>block text 1</div><b>link</b> <div>block text 2</div><i>italic</i> <div>block text 3</div><b>link</b> '; $pattern = '/<div>(?(?!.*?<i>.*?)(.*?))<\/div><b>(.*?)<\/b>/ui'; preg_match_all($pattern, $str, $out); print_r($out); | Выводит Код: Array ( [0] => Array ( [0] => <div>block text 1</div><b>link</b> [1] => <div>block text 2</div><b>link</b> ) [1] => Array ( [0] => block text 1 [1] => block text 3 ) [2] => Array ( [0] => link [1] => link ) ) | , т.е. то, что нужно! Но беда - исходный текст не форматирован, имеет вид Код: <div>block text 1</div><b>link</b><div>block text 2</div><i>italic</i><div>block text 3</div><b>link</b> | т.е. без переносов строки. И результат получается такой: Код: Array ( [0] => Array ( [0] => <div>block text 3</div><b>link</b> ) [1] => Array ( [0] => block text 3 ) [2] => Array ( [0] => link ) ) | Удаляются эл-ты, после которых встречается <i>. Как понимаю, разница в переносах строк. Но форматировать исходный текст нельзя. Как сделать, чтобы строка все-таки распарсивалась полностью? | Всего записей: 6 | Зарегистр. 22-02-2013 | Отправлено: 09:06 25-02-2013 | Исправлено: Cheery, 09:10 25-02-2013 |
|