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

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

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

 

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

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

тема: Выбрать текст между тегами
 
 автор: WebTech   (08.05.2007 в 11:59)   письмо автору
 
 

Есть фрагмент документа


фыдвлор дловраф двылоар
<!-- Start -->
жфдывл
Могут быть другие теги и вообще все, что угодно
ъвыло 
выдлоар 
<!-- Stop -->

ждфлвоыарж


Как выбрать все, что находится между <!-- Start --> и <!-- Stop -->?

Сам я мучился долго, посмотрел на сообщения здесь, но ничего не получается :-(

   
 
 автор: Loki   (08.05.2007 в 12:05)   письмо автору
 
   для: WebTech   (08.05.2007 в 11:59)
 


<!-- Start -->(.+?)<!-- Stop -->

   
 
 автор: WebTech   (08.05.2007 в 16:22)   письмо автору
 
   для: Loki   (08.05.2007 в 12:05)
 

Использовал такую конструкцию, но не работает.

$data = preg_replace('%<!-- Start -->(.+?)<!-- Stop -->%sUi', '\\1', $file);

   
 
 автор: Loki   (08.05.2007 в 16:29)   письмо автору
 
   для: WebTech   (08.05.2007 в 16:22)
 

preg_replace не выбирает, а заменяет. выбирает preg_match. А в остальном все работает правильно.

   
 
 автор: vbps   (08.05.2007 в 18:04)   письмо автору
 
   для: WebTech   (08.05.2007 в 16:22)
 

Когдато то же искал ответы на подобные вопросы, а все просто :)

ТОЛЬКО один минус, если подобных фрагментов встричается несколько, отдаст только первый.


// $str - строка с которой происходят операции
// $flag1 - текст от символов
// $flag2 - текст до символов

function get_str_fragment($str,$flag1,$flag2) {
$str = explode($flag1,$str);
$str = explode($flag2,$str[1]);
return($str[0]);
}


в $str помещаем код указаный выше
$flag1 - <!-- Start -->
$flag2 - <!-- Stop -->

на выходе получим все что между ними.

print get_str_fragment($str,"<!-- Start -->","<!-- Stop -->")

   
 
 автор: kasmanaft   (08.05.2007 в 18:11)   письмо автору
 
   для: vbps   (08.05.2007 в 18:04)
 

>> ТОЛЬКО один минус ..... отдаст только первый.
Для этого есть ф-я preg_match_all

   
 
 автор: vbps   (08.05.2007 в 18:14)   письмо автору
 
   для: kasmanaft   (08.05.2007 в 18:11)
 

да мне это пока и не надо было (а еще кофе не подносит). :)

   
 
 автор: WebTech   (09.05.2007 в 09:39)   письмо автору
 
   для: vbps   (08.05.2007 в 18:14)
 

Спасибо, ваш вариант подходит.

К тому же, строковые функции работают вроде как быстрее регулярных выражений :-)

   
 
 автор: Sfinks   (09.05.2007 в 17:16)   письмо автору
 
   для: WebTech   (09.05.2007 в 09:39)
 

Тогда уж, раз нет задачи сделать это с помошью РВ и выбрать все вхождения, а не только первое, лучше сделать так:
<?
  $s 
substr($s,strpos($s,"<!-- Start -->")+14);
  
$s substr($s,0,strpos($s,"<!-- Stop -->"));
?>
, т.к. explode() это функция работы с массивом, а не со строками.

   
 
 автор: Unkind   (09.05.2007 в 17:32)   письмо автору
 
   для: Sfinks   (09.05.2007 в 17:16)
 

, т.к. explode() это функция работы с массивом, а не со строками.
Да что Вы говорите...

   
 
 автор: Sfinks   (09.05.2007 в 18:11)   письмо автору
 
   для: Unkind   (09.05.2007 в 17:32)
 

Может я и не правильно выразился, но мой вариант работает на 10% быстрее. Я проверил.

   
 
 автор: vbps   (10.05.2007 в 04:06)   письмо автору
 
   для: Sfinks   (09.05.2007 в 18:11)
 

>Может я и не правильно выразился, но мой вариант работает на 10% быстрее. Я проверил.

Возможно и быстрее, не проверял.
Однако мое решение подойдет для любого случая.
Можно разобрать любую страницу по частям и собрать ее как угодно, при этом не меняя в функции ничего.

   
Rambler's Top100
вверх

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