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

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

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

 

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

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

тема: Извлечь вложенные элементы при помощи регулярных выражений
 
 автор: alHaos   (08.11.2011 в 08:25)   письмо автору
 
 

Доброго дня уважаемые
подскажите пожалуйста каким выражением из данного текста выбрать [same data]
<root>
<trash></trash>
<element>
<trash></trash>
<element>
[same data]
</element>
</element>
<trash></trash>
</root>

(?<=<element>).*(?=</element>) с опцией dotall возвращает

<trash></trash>
<element>
same data
</element>

а мне надо
[same data]

  Ответить  
 
 автор: cheops   (08.11.2011 в 12:04)   письмо автору
 
   для: alHaos   (08.11.2011 в 08:25)
 

Можно начать отталкиваться от следующего регулярного выражения
<?php
  $text 
'<root>
 <trash></trash>
 <element>
 <trash></trash>
 <element>
 [same data]
 </element>
 </element>
 <trash></trash>
 </root>'
;
  
$pattern "|<element>(.*?)</element>|is";
  if(
preg_match($pattern$text$out))
  {
    echo 
$out[1];
  }
?>

  Ответить  
 
 автор: alHaos   (08.11.2011 в 12:18)   письмо автору
 
   для: cheops   (08.11.2011 в 12:04)
 

блин в реализации регулярных выражений под php слаб.

проверяю тут http://gskinner.com/RegExr/

|<element>(.*?)</element>|is не работает.

  Ответить  
 
 автор: cheops   (08.11.2011 в 12:45)   письмо автору
 
   для: alHaos   (08.11.2011 в 12:18)
 

У вас какие регулярные выражения Perl или POSIX и где их планируете использовать?

  Ответить  
 
 автор: alHaos   (08.11.2011 в 13:14)   письмо автору
 
   для: cheops   (08.11.2011 в 12:45)
 

Хотелось бы решение которое не зависит от диалекта регулярных выражений. если Вам это интересно то я пользую их в oracle, и powershell.

  Ответить  
 
 автор: AlexZagr   (16.11.2011 в 13:21)   письмо автору
 
   для: cheops   (08.11.2011 в 12:04)
 

такое решение не подойдет, захватывается все от ПЕРВОГО <element> до первого </element>.
попробуйте $pattern = "|<element>((?!<element>).)+</element>|is";

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

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