[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_match_all совпадают начало и конец строки
PyccHeBa
Привет. Очень типичная ситуация. Помогите разобратья. Нужно взять все вида <div id=name1>text</div>

Можно ли написать регулярку вида <div id=name1>.+?<div id=name1> где начало и конец искомой строки совпадают?

PHP
$str "<div id=name1>askjdfasdklfj</div><div>asdfsad</div><div id=name1>alkdsfj</div><div id=name1>aksdfjasdfasfsadfujsadoifu</div>";

preg_match_all ("~ что-то ~"$str$res);

foreach (
$res[0] as $key => $val) {
  
$res[0][$key]=htmlspecialchars($val);
  
//echo ${$key};
}

echo 
"<pre>";
print_r($res);
echo 
"</pre>";





Спустя 4 часа, 26 минут, 1 секунда (17.06.2009 - 08:28) glock18 написал(а):
Цитата
Можно ли написать регулярку вида <div id=name1>.+?<div id=name1> где начало и конец искомой строки совпадают?


Вы ее написали уже. В чем сложность?

Спустя 1 час, 15 минут, 7 секунд (17.06.2009 - 09:43) Oyeme написал(а):

PHP
preg_match_all('/<div id=name1>[a-zA-Z]{1,}<\/div>/i'$str$res);


Вытаскивает все что начинаеться с <div id=name1> ... </div>
Подробней напиши ,как должно работать,и каков результат должен быть.

Спустя 11 минут, 21 секунда (17.06.2009 - 09:54) PyccHeBa написал(а):
в том то и дело что бывают ситуации когда </div> не пойдет - там слишком много таких закрывающих дивов, не надежно. А надежно только так <div id=name1>....<div id=name1> -вот этот открывающий див - начало следующего искомого.

Т.е. нужно чтобы второй поиск начался с оконочания первого, третий с окончания второго и т.п. Ну а последний можно напимер до конца - до </body>. Во многих случаях это нормально.
Надеюсь понятно и надеюсь понятно что бывают ситуации когда нельзя по другому.
Выдать должен
PHP
Array (
[
0]=> "<div id=name1>abc</div>......<div id=name1>"
[1]=> "<div id=name1>fgh</div>......<div id=name1>"
....
[
17]=>"<div id=name1>fgh</div>......</body>"
)

Наверняка у многих бывали случаи когда по другому нельзя

Временное решение "~me1>.+?<div id=na~"
Но хотелось бы понадежнее

Спустя 22 минуты, 38 секунд (17.06.2009 - 10:17) glock18 написал(а):
Цитата
Наверняка у многих бывали случаи когда по другому нельзя

По-другому можно. но регулярка получится несколько сложнее. поправьте если я не прав:

Цитата
в том то и дело что бывают ситуации когда </div> не пойдет - там слишком много таких закрывающих дивов, не надежно


это вложенные дивы только? ведь не может быть просто "закрывающих тегов" в валидном хтмл (хотя везде ли он сейчас валиден, но все же). Если дело во вложенных дивах, то это дело решается. Просто внутри регулярки нужно, если встречаете еще открывающийся див пропустить следующий закрывающий.

Спустя 1 час, 4 минуты, 12 секунд (17.06.2009 - 11:21) PyccHeBa написал(а):
Ты ведь сам написал что html не везде сейчас валиден. Часто выдают довольно грязный код.
Описанная ситуация часто встречается.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.