<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589852</guid>
        <pubDate>Mon, 06 Apr 2015 16:59:37 +0000</pubDate>
        <title>Как задать шаблон, не содержащей заданный подшаблон?</title>
        <link>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589852</link>
        <description><![CDATA[amk: <strong class='tag-b'>S.Eugene</strong>, по-моему, там вообще всё удалится. У тебя не написано, что на первом &lt;&#092;/span&gt; надо поиск завершать.<br>
<br>
Эта конкретная задача решается и регулярным выражением, но выражение получается слишком громоздким, чтобы вот так сразу его записать.<br>
И глубина вложений будет ограничена.<br>
<br>
Или можно сделать несколькими выражениями.<br>
<br>
Можно искать выражения /&lt;span class=bad( .*?)&gt;/, /&lt;span( .*?)/ и /&lt;&#092;/span&gt;/ и обрабатывать их как вложенные скобки, но придётся программировать.<br>
<br>
Можно поиграть с внутренними вложенными парами &lt;span&gt; &lt;/span&gt;, проверяя. Но придётся цикл организовывать. Это можно даже в sed сделать.<br>
<br>
Регулярное выражение (tr1)<br>
/&lt;span class=bad&gt;(([^&lt;]|&lt;&#092;/?([^s]|s([^p]|(p[^a]|a([^n]|n[^ &gt;])))))[ &gt;])*?&lt;&#092;/span&gt;/<br>
находит &lt;span class=bad&gt;...&lt;/span&gt;, если в него не вложено других &lt;span&gt;]]></description>
        <author>amk</author>
        <category>RegExp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589692</guid>
        <pubDate>Mon, 06 Apr 2015 10:31:33 +0000</pubDate>
        <title>Как задать шаблон, не содержащей заданный подшаблон?</title>
        <link>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589692</link>
        <description><![CDATA[DIS: Лучше разобрать на DOM (например с помощью того же браузера) и искать соотв. методами (getElementsByClassName)]]></description>
        <author>DIS</author>
        <category>RegExp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589668</guid>
        <pubDate>Mon, 06 Apr 2015 09:40:24 +0000</pubDate>
        <title>Как задать шаблон, не содержащей заданный подшаблон?</title>
        <link>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589668</link>
        <description><![CDATA[AVA12: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>можно ли записать шаблон для строки, состоящей из символов a,b,c,d, но не содержащей подстроку bad?</div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Нужно найти и удалить все теги span</div></div><br>
Ну вот опять - сперва автор спрашивает, как правильно класть срубы с помощью пилы, а в итоге выясняется, что нужно построить небоскреб.<br>
<br>
Надо бы написать правила раздела, и первым же пунктом: <span class="tag-color tag-color-named" data-value="red" style="color: red"><strong class='tag-b'>HTML не парсится регулярными выражениями&#33;</strong></span> Регвыром можно разбить документ на теги (раздельно открывающие и закрывающие) и сырой текст. Затем другим регвыром анализировать имя и параметры открывающих тегов, чтобы определить, выводить их или нет. Все открывающие теги с флагом &quot;выводить/не выводить&quot; класть в стек, снимать при получении закрывающего тега.]]></description>
        <author>AVA12</author>
        <category>RegExp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589563</guid>
        <pubDate>Mon, 06 Apr 2015 03:02:34 +0000</pubDate>
        <title>Как задать шаблон, не содержащей заданный подшаблон?</title>
        <link>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589563</link>
        <description><![CDATA[S.Eugene: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=401195&view=findpost&p=3589535'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ViktorXP &#064; <time class="tag-quote__quoted-time" datetime="2015-04-05T18:44:27+00:00">05.04.15, 18:44</time></span><div class='quote '>так иди на оборот. если подходит под шаблон bad то такую строку отвергаем. иначе принимаем.</div></div><br>
А если мне такой отрицательное условие надо использовать внутри другого шаблона?<br>
<br>
Например, такая задача. Нужно найти и удалить все теги span такого вида &lt;span class=bad&gt;text&lt;/span&gt;.<br>
<br>
Проблема в том, что они могут быть вложенные. Например так:<br>
&lt;span class=bad&gt;text11&lt;span class=good&gt;text2&lt;/span&gt;text12&lt;/span&gt;.<br>
<br>
Если в preg_replace применить шаблон <br>
&#036;text = preg_replace( &#39;/&lt;span class=bad&gt;(.+)&lt;&#092;/span&gt;/&#39;, &#39;&#036;1&#39;, &#036;text );<br>
<br>
То найдется вот это<br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue">&lt;span class=bad&gt;text11&lt;span class=good&gt;text2&lt;/span&gt;</span>text12&lt;/span&gt;.<br>
<br>
И после удаления получим<br>
text11&lt;span class=good&gt;text2 text12&lt;/span&gt;.<br>
<br>
а должно получиться<br>
text11&lt;span class=good&gt;text2&lt;/span&gt;text12.<br>
<br>
Нужно как-то указать, что между &lt;span class=bad&gt; и &lt;/span&gt; не должно быть других открывающих тегов span, то есть не должно быть подстроки &lt;span[^&gt;]*&gt;. При этом между ними могут быть любые другие теги.]]></description>
        <author>S.Eugene</author>
        <category>RegExp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589535</guid>
        <pubDate>Sun, 05 Apr 2015 18:44:27 +0000</pubDate>
        <title>Как задать шаблон, не содержащей заданный подшаблон?</title>
        <link>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589535</link>
        <description><![CDATA[ViktorXP: так иди на оборот. если подходит под шаблон bad то такую строку отвергаем. иначе принимаем.]]></description>
        <author>ViktorXP</author>
        <category>RegExp</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589424</guid>
        <pubDate>Sun, 05 Apr 2015 01:18:36 +0000</pubDate>
        <title>Как задать шаблон, не содержащей заданный подшаблон?</title>
        <link>https://forum.sources.ru/index.php?showtopic=401195&amp;view=findpost&amp;p=3589424</link>
        <description><![CDATA[S.Eugene: Например, можно ли записать шаблон для строки, состоящей из символов a,b,c,d, но не содержащей подстроку bad?<br>
<br>
aca<span class="tag-color tag-color-named" data-value="red" style="color: red">bad</span>bcad - эта не подходит<br>
acadabbcad - эта подходит]]></description>
        <author>S.Eugene</author>
        <category>RegExp</category>
      </item>
	
      </channel>
      </rss>
	