<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html</link>
    <description>Здравствуйте!&lt;br&gt;&lt;br&gt;Вначале опишу задачу.&lt;br&gt;&lt;br&gt;Нужно найти соответствие строки по следующему макрокоду:&lt;br&gt;&lt;br&gt;&#091;code&#093;((НЕ abc)И(НЕ def)И(НЕ ghi))xyz&#091;/code&#093;&lt;br&gt;&lt;br&gt;То есть, строки, удовлетворяющие регвыру, могут выглядеть так:&lt;br&gt;&lt;br&gt;&#091;code&#093;jklxyz&lt;br&gt;cbaxyz&lt;br&gt;adgxyz&#091;/code&#093;&lt;br&gt;&lt;br&gt;Строки, не удовлетворяющие регвыру, выглядят так:&lt;br&gt;&lt;br&gt;&#091;code&#093;abcxyz&lt;br&gt;defxyz&lt;br&gt;ghixyz&#091;/code&#093;&lt;br&gt;&lt;br&gt;&#091;b&#093;Задача:&#091;/b&#093; нужно написать выражение, повторяющее поведение приведенного выше макрокода.&lt;br&gt;&lt;br&gt;PS:&lt;br&gt;&lt;br&gt;Дело в том, что я не понимаю две вещи:&lt;br&gt;&lt;br&gt;1. Как в регвырах написать &quot;несоответсвие подстроке&quot;. Несоответсвие символу или несоответсвие диапазону символов - это понятно как делать. А как сделать несоответсвие подстроке, например, что-то типа &#091;b&#093;!(abc)&#091;/b&#093; - непонятно.&lt;br&gt;&lt;br&gt;2. Как связывать куски шаблонов через логическую И - тоже непонятно. В регвырах есть только операция ИЛИ.&lt;br&gt;</description>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#19</link>
    <pubDate>Tue, 08 Nov 2011 18:51:01 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; Чё там помнить-то? Название, &quot;де Моргана&quot;, в гугле за минуту нашёл...&lt;br&gt;&amp;gt;&amp;gt; !( !(!A &amp; !B &amp; !С)  &amp;#124; !( !D &amp; !E &amp; !F) &amp;#124; !( !G &amp; !H &amp; !K) )  = ?&lt;br&gt;&amp;gt; = !( A&amp;#124;B&amp;#124;C &amp;#124; D&amp;#124;E&amp;#124;F &amp;#124; G&amp;#124;H&amp;#124;K ) &lt;br&gt;&amp;gt; = !A &amp; !B &amp; !C &amp; ... &amp; !K &lt;br&gt;&amp;gt; Хотя, глядя на результат, над был, нверное, снгачала внешнюю скобку &quot;крутить&quot; - &lt;br&gt;&amp;gt; = !!(!A &amp; !B &amp; !С) &amp; !!( !D &amp; !E &amp; &lt;br&gt;&amp;gt; !F) &amp; !!( !G &amp; !H &amp; !K) &lt;br&gt;&amp;gt; = !A &amp; !B &amp; !С &amp; !D &amp; !E &amp; !F &lt;br&gt;&amp;gt; &amp; !G &amp; !H &amp; !K &lt;br&gt;&amp;gt; Удовлетворён? B) &lt;br&gt;&lt;br&gt;!( !(!A &amp; !B &amp; !С)  &amp;#124; !( !D &amp; !E &amp; !F)  &amp;#124; !( !G &amp; !H &amp; !K)  )  = &lt;br&gt;&lt;br&gt;внешняя скобка раскрывается как &lt;br&gt;&lt;br&gt;!(!A &amp; !B &amp; !С) &amp; !( !D &amp; !E &amp; !F) &amp; !( !G &amp; !H &amp; !K)&lt;br&gt;&lt;br&gt;потом тройки &lt;br&gt;&lt;br&gt;!( !A &amp; !B &amp; !С ) == A &amp;#124; B &amp;#124; C  &lt;br&gt;!( !D &amp; !E &amp; !F ) == D &amp;#124; E &amp;#124; F&lt;br&gt;!( !G &amp; !H &amp; !K ) == G &amp;#124; H &amp;#124; K&lt;br&gt;&lt;br&gt;получаем &lt;br&gt;&lt;br&gt;( A &amp;#124; B &amp;#124; C  ) &amp;  (D &amp;#124; E &amp;#124; F)  &amp; (G &amp;#124; H &amp;#124; K)&lt;br&gt;&lt;br&gt;...&lt;br&gt;ладно, забей, мож и я где-то запутался. &#037;)&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (Andrey Mitrofanov)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#18</link>
    <pubDate>Tue, 08 Nov 2011 14:15:35 GMT</pubDate>
    <description>&amp;gt; Митрофаныч, а ты наизусть помнишь де Моргана и другие логические комбинации?&lt;br&gt;&lt;br&gt;Чё там помнить-то? Название, &quot;де Моргана&quot;, в гугле за минуту нашёл...&lt;br&gt;&lt;br&gt;&amp;gt; !( !(!A &amp; !B &amp; !С)  &amp;#124; !( !D &amp; !E &amp; !F) &amp;#124; !( !G &amp; !H &amp; !K) )  = ?&lt;br&gt;&lt;br&gt;= !( A&amp;#124;B&amp;#124;C &amp;#124; D&amp;#124;E&amp;#124;F &amp;#124; G&amp;#124;H&amp;#124;K )&lt;br&gt;= !A &amp; !B &amp; !C &amp; ... &amp; !K&lt;br&gt;&lt;br&gt;Хотя, глядя на результат, над был, нверное, снгачала внешнюю скобку &quot;крутить&quot; -&lt;br&gt;= !!(!A &amp; !B &amp; !С) &amp; !!( !D &amp; !E &amp; !F) &amp; !!( !G &amp; !H &amp; !K)&lt;br&gt;= !A &amp; !B &amp; !С &amp; !D &amp; !E &amp; !F &amp; !G &amp; !H &amp; !K&lt;br&gt;&lt;br&gt;Удовлетворён? B)&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#17</link>
    <pubDate>Tue, 08 Nov 2011 01:56:50 GMT</pubDate>
    <description>&amp;gt;&amp;gt; (NOT A) AND (NOT B) AND  (NOT C) AND (NOT &lt;br&gt;&amp;gt;&amp;gt; D) AND ... (NOT Z) == NOT (A AND B AND &lt;br&gt;&amp;gt;&amp;gt; C AND D AND ... AND Z) &lt;br&gt;&amp;gt; Нет, садись - двойка. http://ru.wikipedia.org/wiki/&#037;D0&#037;97&#037;D0&#037;B0&#037;D0&#037;BA&#037;D0&#037;BE&#037;D0&#037;BD&#037;D1&#037;8B_&#037;D0&#037;B4&#037;D0&#037;B5_&#037;D0&#037;9C&#037;D0&#037;BE&#037;D1&#037;80&#037;D0&#037;B3&#037;D0&#037;B0&#037;D0&#037;BD&#037;D0&#037;B0 &lt;br&gt;&lt;br&gt;Митрофаныч, а ты наизусть помнишь де Моргана и другие логические комбинации?  &lt;br&gt;&lt;br&gt;&lt;br&gt;!( !(!A &amp; !B &amp; !С)  &amp;#124; !( !D &amp; !E &amp; !F)  &amp;#124; !( !G &amp; !H &amp; !K)  )  = ?&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (Andrey Mitrofanov)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#16</link>
    <pubDate>Mon, 03 Oct 2011 10:10:39 GMT</pubDate>
    <description>&amp;gt; (NOT A) AND (NOT B) AND  (NOT C) AND (NOT &lt;br&gt;&amp;gt; D) AND ... (NOT Z) == NOT (A AND B AND &lt;br&gt;&amp;gt; C AND D AND ... AND Z)&lt;br&gt;&lt;br&gt;Нет, садись - двойка. http://ru.wikipedia.org/wiki/&#037;D0&#037;97&#037;D0&#037;B0&#037;D0&#037;BA&#037;D0&#037;BE&#037;D0&#037;BD&#037;D1&#037;8B_&#037;D0&#037;B4&#037;D0&#037;B5_&#037;D0&#037;9C&#037;D0&#037;BE&#037;D1&#037;80&#037;D0&#037;B3&#037;D0&#037;B0&#037;D0&#037;BD&#037;D0&#037;B0&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (BJyyewsrhbe tud)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#15</link>
    <pubDate>Fri, 30 Sep 2011 18:29:52 GMT</pubDate>
    <description>&amp;gt; Поэтому, правильнее задачу на макроязыке можно переформулировать так: &lt;br&gt;&amp;gt; &#091;code&#093;((НЕ a)И(НЕ bc)И(НЕ def))xyz&#091;/code&#093; &lt;br&gt;&lt;br&gt;Да будет известно, что &lt;br&gt;&lt;br&gt; &#091;code&#093;(NOT A) AND (NOT B) AND  (NOT C) AND (NOT D) AND ... (NOT Z) == NOT (A AND B AND C AND D AND ... AND Z)  &#091;/code&#093;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (XAnder)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#14</link>
    <pubDate>Tue, 30 Aug 2011 04:37:12 GMT</pubDate>
    <description>&amp;gt; а более другие подстроки и количество их больше, размер разный. Просто &lt;br&gt;&amp;gt; когда придумывал задачу, даже не думал, что может возникнуть ограничение на &lt;br&gt;&amp;gt; одинаковость длины подстрок.&lt;br&gt;&lt;br&gt;Нет такого ограничения. Как я писал выше, есть лишь условие, что выражение внутри (?&amp;lt;!...) должно быть постоянной длины.&lt;br&gt;&lt;br&gt;Тут уж man perlre или http://perldoc.perl.org/perlre.html на предмет &quot;Extended Patterns&quot;.&lt;br&gt;&lt;br&gt;&amp;gt; ((НЕ a)И(НЕ bc)И(НЕ def))xyz&lt;br&gt;&lt;br&gt;Здесь все строки постоянной длины.&lt;br&gt;&lt;br&gt;&amp;gt; Должны быть выбраны строки: &lt;br&gt;&amp;gt; ghixyz &lt;br&gt;&amp;gt; bbbxyz &lt;br&gt;&amp;gt; bxyz &lt;br&gt;&amp;gt; kkxyz&lt;br&gt;&lt;br&gt;&#091;code&#093;$ perl -e &apos;for (qw/abcxyz defxyz ghixyz aaaxyz bbbxyz bxyz kkxyz/) &#123;print &quot;$_&#092;n&quot; if m/(?&amp;lt;!a)(?&amp;lt;!bc)(?&amp;lt;!def)xyz/&#125;&apos;&lt;br&gt;ghixyz&lt;br&gt;bbbxyz&lt;br&gt;bxyz&lt;br&gt;kkxyz&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (anonymous)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#13</link>
    <pubDate>Mon, 29 Aug 2011 19:51:51 GMT</pubDate>
    <description>Ответ, как всегда, в /dev/random:&lt;br&gt;&#091;code&#093;$ dd if=/dev/random bs=64 count=1&lt;br&gt;grep&#123;$a=$_;!grep&#123;$_&#125;map&#123;$a=~/(?&amp;lt;=$_)xyz/&#125;qw/a bc def/&#125;&amp;lt;&amp;gt;;#wtf??&lt;br&gt;$ _&#091;/code&#093;Там много интересного, почитай ;)&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (xintrea)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#12</link>
    <pubDate>Mon, 29 Aug 2011 15:29:14 GMT</pubDate>
    <description>&amp;gt; Давай-ка сюда полное условие задачи, а то так можно долго рассусоливать.&lt;br&gt;&amp;gt; PS. Правильно поставленный вопрос &amp;#8212; уже половина ответа. (кто-то умный сказал) &lt;br&gt;&lt;br&gt;Полное условие слишком большое. Я специально сделал примитивную задачу, чтобы решить основной вопрос поиска таких подстрок. На самом деле там конечно не abc-def-ghi, а более другие подстроки и количество их больше, размер разный. Просто когда придумывал задачу, даже не думал, что может возникнуть ограничение на одинаковость длины подстрок.&lt;br&gt;&lt;br&gt;Поэтому, правильнее задачу на макроязыке можно переформулировать так:&lt;br&gt;&lt;br&gt;&#091;code&#093;((НЕ a)И(НЕ bc)И(НЕ def))xyz&#091;/code&#093;&lt;br&gt;&lt;br&gt;На тестовых данных:&lt;br&gt;&lt;br&gt;&#091;code&#093;abcxyz&lt;br&gt;defxyz&lt;br&gt;ghixyz&lt;br&gt;aaaxyz&lt;br&gt;bbbxyz&lt;br&gt;bxyz&lt;br&gt;kkxyz&#091;/code&#093;&lt;br&gt;&lt;br&gt;Должны быть выбраны строки:&lt;br&gt;&lt;br&gt;&#091;code&#093;ghixyz&lt;br&gt;bbbxyz&lt;br&gt;bxyz&lt;br&gt;kkxyz&#091;/code&#093;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Регулярные выражения: совмещение шаблонов через И, ИЛИ, НЕ (XAnder)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9228.html#11</link>
    <pubDate>Mon, 29 Aug 2011 13:59:26 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Внутри (?&amp;lt;!...) допустимы только строки постоянной длины, (?&amp;lt;!ab*c) не прокатит.&lt;br&gt;&amp;gt; Вот, тут и вылезла проблема.&lt;br&gt;&amp;gt; Оказывается, &quot;отрицательные&quot; строки могут быть разной длинны.  То есть, набор не &lt;br&gt;&amp;gt; &quot;abc&quot; &quot;def&quot; &quot;ghi&quot;, но и, например, &quot;a&quot; &quot;bc&quot; &quot;def&quot;.&lt;br&gt;&amp;gt; Что делать в этом случае?&lt;br&gt;&lt;br&gt;Давай-ка сюда полное условие задачи, а то так можно долго рассусоливать.&lt;br&gt;&lt;br&gt;PS. Правильно поставленный вопрос &amp;#8212; уже половина ответа. (кто-то умный сказал)&lt;br&gt;</description>
</item>

</channel>
</rss>
