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

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

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

 

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

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

тема: вырезка тегов
 
 автор: defi   (20.01.2011 в 19:50)   письмо автору
 
 

есть например такая строка:

<p>text</p>
<pre><code>
<p>text</p>
</code></pre>
<p>text</p>

подскажите как мне вырезать теги <p> и </p>, которые находятся внутри тегов pre code, не трогая остальных.

  Ответить  
 
 автор: neadekvat   (20.01.2011 в 20:28)   письмо автору
 
   для: defi   (20.01.2011 в 19:50)
 

/<pre><code>\s*(<p>[^<]+<\/p>)/i

  Ответить  
 
 автор: defi   (20.01.2011 в 20:47)   письмо автору
 
   для: neadekvat   (20.01.2011 в 20:28)
 

а если например между pre code будет 10-15 абзацев, как тогда быть?

  Ответить  
 
 автор: neadekvat   (20.01.2011 в 20:50)   письмо автору
 
   для: defi   (20.01.2011 в 20:47)
 

'/<pre><code>\s*(<p>.*?<\/p>)/is'

  Ответить  
 
 автор: Trianon   (20.01.2011 в 21:01)   письмо автору
 
   для: neadekvat   (20.01.2011 в 20:50)
 

неубедительно :)
автомат РВ не станет останавливаться на некотором </p> из середины сам по себе.

  Ответить  
 
 автор: neadekvat   (20.01.2011 в 22:29)   письмо автору
 
   для: Trianon   (20.01.2011 в 21:01)
 

/<pre><code>\s*(<p>[^<]+<\/p>)/i

?
Почему-то так не работало, когда писал второй пост.. а теперь работает. Все-таки порой я не понимаю чего-то в работе компутеров.

Но, кстати, приведенный перед этим вариант тоже рабочий - там же жадность инвертирована.

  Ответить  
 
 автор: Trianon   (20.01.2011 в 23:14)   письмо автору
 
   для: neadekvat   (20.01.2011 в 22:29)
 

что ж вы все на эту жадность опираетесь, как на манку...
(это я не Вам лично, здесь 95% примеров, завязанных на жадность,
а значит, как по мне, не являющихся стабильными)

контрпример придумать? :)


<p>text1</p>
<p>text2</p>
  <pre>
   <code>
    <p>text3</p>
    <p>text4</p>
   </code>
  </pre>
  <p>text5</p>
  <p>text6</p>
  <pre>
   <code>
    <p>text7</p>
    <p>text8</p>
   </code>
  </pre>
<p>text9</p> 
<p>text10</p> 

  Ответить  
 
 автор: neadekvat   (20.01.2011 в 23:44)   письмо автору
 
   для: Trianon   (20.01.2011 в 23:14)
 

/<pre>\s*<code>\s*(<p>[^<]+<\/p>\s+)+<\/code>\s*<\/pre>/i

Однако получается достать только последний <p></p>, вложенный в code. И не знаю, как это доделать.. Отчасти, потому что не понимаю - РВ находит только последнее (втф, если так - они идентичны) или перезаписывает предыдущее вхождение найденным.

  Ответить  
 
 автор: Trianon   (21.01.2011 в 00:01)   письмо автору
 
   для: neadekvat   (20.01.2011 в 23:44)
 

 <? 

 $pattern  
=
'%
( <[a-z0-9]+ [^>]* (?<=/)>)
|
(
 <( [a-z0-9]+) [^>]* (?<!/)>
 (
  (
     [^<]*
  |
     (?R)
  )*
 )</\\3>
)
%x'
;


Это в качестве информации к размышлению - применительно к тегам вообще. А не именно сюда.

  Ответить  
 
 автор: neadekvat   (21.01.2011 в 00:07)   письмо автору
 
   для: Trianon   (21.01.2011 в 00:01)
 

Идею в целом, кажется, понял.

Однако, если брать конкретно эту ситуацию - какую задачу вы решали?
Я старался сделать так, чтобы на выходе было 4 элемента: test3, text4, text7, text8.

  Ответить  
 
 автор: Trianon   (21.01.2011 в 00:31)   письмо автору
 
   для: neadekvat   (21.01.2011 в 00:07)
 

>Однако, если брать конкретно эту ситуацию - какую задачу вы решали?

Ситуацию этого топика? да я, собственно, никакую не решал.
выражение на языке разметки (html) - рекурсивно определяемое.
Регулярки, как инструмент, с такими не работают, а R-шаблоны - исключение, притянутое, в общем-то, за уши.
Плюс, как правило, истинный источник данных в подобных ситуациях, он же не в html?
Значит данные можно получить в структурированном виде - из БД, из DOM, из дерева в файле, еще откуда-нибудь, где вся информация уже разобрана.
Зачем мне её решать?

Ну то есть можно конечно, типа на слабо.
Но я пока не повелся :)

>Я старался сделать так, чтобы на выходе было 4 элемента: test3, text4, text7, text8.
да, конечно.

  Ответить  
 
 автор: neadekvat   (21.01.2011 в 00:36)   письмо автору
 
   для: Trianon   (21.01.2011 в 00:31)
 

> Значит данные можно получить в структурированном виде - из БД, из DOM, из дерева в файле, еще откуда-нибудь, где вся информация уже разобрана.
Согласен :) К тому же, для работы с dom существует даже встроенная поддержка, кажется. Ну а про подключаемые классы уж стоит ли говорить.

> да, конечно.
Как-то двусмысленно)

  Ответить  
 
 автор: Trianon   (21.01.2011 в 01:21)   письмо автору
 
   для: neadekvat   (21.01.2011 в 00:36)
 

>> да, конечно.
>Как-то двусмысленно)
я так понял, что автор предполагал выдернуть именно перечисленное.

  Ответить  
 
 автор: mall12   (21.01.2011 в 22:10)   письмо автору
 
   для: Trianon   (21.01.2011 в 01:21)
 

321

  Ответить  
 
 автор: defi   (25.01.2011 в 09:04)   письмо автору
 
   для: Trianon   (20.01.2011 в 23:14)
 

>контрпример придумать? :)
>
>

><p>text1</p>
><p>text2</p>
>  <pre>
>   <code>
>    <p>text3</p>
>    <p>text4</p>
>   </code>
>  </pre>
>  <p>text5</p>
>  <p>text6</p>
>  <pre>
>   <code>
>    <p>text7</p>
>    <p>text8</p>
>   </code>
>  </pre>
><p>text9</p> 
><p>text10</p> 
>

Напишите пожалуйста РВ для вашего примера, т.е. чтобы вытащить text3, text4, text7, text8.

  Ответить  
 
 автор: Trianon   (25.01.2011 в 12:05)   письмо автору
 
   для: defi   (25.01.2011 в 09:04)
 

Это контрпример.
Контрпример предназначен для доказательства невыполнения условий, неработоспособности алгоритма, а не для того, чтобы по нему что-то писать.

  Ответить  
 
 автор: mihdan   (22.01.2011 в 23:17)   письмо автору
 
   для: defi   (20.01.2011 в 19:50)
 

Вы не рассматриваете работу через DOMDocument?

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

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