|
|
|
| есть например такая строка:
<p>text</p>
<pre><code>
<p>text</p>
</code></pre>
<p>text</p>
|
подскажите как мне вырезать теги <p> и </p>, которые находятся внутри тегов pre code, не трогая остальных. | |
|
|
|
|
|
|
|
для: defi
(20.01.2011 в 19:50)
| | /<pre><code>\s*(<p>[^<]+<\/p>)/i | |
|
|
|
|
|
|
|
для: neadekvat
(20.01.2011 в 20:28)
| | а если например между pre code будет 10-15 абзацев, как тогда быть? | |
|
|
|
|
|
|
|
для: defi
(20.01.2011 в 20:47)
| | '/<pre><code>\s*(<p>.*?<\/p>)/is' | |
|
|
|
|
|
|
|
для: neadekvat
(20.01.2011 в 20:50)
| | неубедительно :)
автомат РВ не станет останавливаться на некотором </p> из середины сам по себе. | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2011 в 21:01)
| |
/<pre><code>\s*(<p>[^<]+<\/p>)/i
|
?
Почему-то так не работало, когда писал второй пост.. а теперь работает. Все-таки порой я не понимаю чего-то в работе компутеров.
Но, кстати, приведенный перед этим вариант тоже рабочий - там же жадность инвертирована. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: Trianon
(20.01.2011 в 23:14)
| |
/<pre>\s*<code>\s*(<p>[^<]+<\/p>\s+)+<\/code>\s*<\/pre>/i
|
Однако получается достать только последний <p></p>, вложенный в code. И не знаю, как это доделать.. Отчасти, потому что не понимаю - РВ находит только последнее (втф, если так - они идентичны) или перезаписывает предыдущее вхождение найденным. | |
|
|
|
|
|
|
|
для: neadekvat
(20.01.2011 в 23:44)
| |
<?
$pattern =
'%
( <[a-z0-9]+ [^>]* (?<=/)>)
|
(
<( [a-z0-9]+) [^>]* (?<!/)>
(
(
[^<]*
|
(?R)
)*
)</\\3>
)
%x';
|
Это в качестве информации к размышлению - применительно к тегам вообще. А не именно сюда. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2011 в 00:01)
| | Идею в целом, кажется, понял.
Однако, если брать конкретно эту ситуацию - какую задачу вы решали?
Я старался сделать так, чтобы на выходе было 4 элемента: test3, text4, text7, text8. | |
|
|
|
|
|
|
|
для: neadekvat
(21.01.2011 в 00:07)
| | >Однако, если брать конкретно эту ситуацию - какую задачу вы решали?
Ситуацию этого топика? да я, собственно, никакую не решал.
выражение на языке разметки (html) - рекурсивно определяемое.
Регулярки, как инструмент, с такими не работают, а R-шаблоны - исключение, притянутое, в общем-то, за уши.
Плюс, как правило, истинный источник данных в подобных ситуациях, он же не в html?
Значит данные можно получить в структурированном виде - из БД, из DOM, из дерева в файле, еще откуда-нибудь, где вся информация уже разобрана.
Зачем мне её решать?
Ну то есть можно конечно, типа на слабо.
Но я пока не повелся :)
>Я старался сделать так, чтобы на выходе было 4 элемента: test3, text4, text7, text8.
да, конечно. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2011 в 00:31)
| | > Значит данные можно получить в структурированном виде - из БД, из DOM, из дерева в файле, еще откуда-нибудь, где вся информация уже разобрана.
Согласен :) К тому же, для работы с dom существует даже встроенная поддержка, кажется. Ну а про подключаемые классы уж стоит ли говорить.
> да, конечно.
Как-то двусмысленно) | |
|
|
|
|
|
|
|
для: neadekvat
(21.01.2011 в 00:36)
| | >> да, конечно.
>Как-то двусмысленно)
я так понял, что автор предполагал выдернуть именно перечисленное. | |
|
|
|
|
|
|
|
для: Trianon
(21.01.2011 в 01:21)
| | 321 | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: defi
(25.01.2011 в 09:04)
| | Это контрпример.
Контрпример предназначен для доказательства невыполнения условий, неработоспособности алгоритма, а не для того, чтобы по нему что-то писать. | |
|
|
|
|
|
|
|
для: defi
(20.01.2011 в 19:50)
| | Вы не рассматриваете работу через DOMDocument? | |
|
|
|