Регулярка "не слово"

Тема в разделе "Регулярные выражения", создана пользователем 4erepaha13, 12 янв 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. 4erepaha13

    4erepaha13

    Регистр.:
    20 июн 2009
    Сообщения:
    155
    Симпатии:
    17
    Есть текст вида
    Какой регуляркой можно выдрать текст внутри дивов, но с проверкой: если не admin, то брать, если admin- то не брать (исключение совпадения заданного слова).

    И второй вопрос побочный- как исключать тексты с известными границами начала и конца, но стоп слово находится произвольно внутри контента (а не сразу после открывающего дива как в первом примере).
     
  2. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Сам никогда не исспользую проверки в регуляторках, поскольку не самая лучшая идея. Лучше всего получить содержимое всех дивов а уж потом провести проверку штатными средствами.
    PHP:
    <?php
    preg_mach_all
    ("#<div id=1>(.+)</div>#isU"$text$out);
    unset(
    $out[0]);
    $i=0;
    foreach (
    $out[1] as $mach){
     if (
    $mach == "(admin)") unset($out[1][$i]);
     
    $i++;
    }

    echo 
    "<pre>";
    print_r($out[1]);
    echo 
    "</pre>";
    ?> 

     
  3. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    PHP:
    preg_match_all('#<div[^>]*>(((?!admin|mod[a-z]+?or).)*?)</div>#s',$text,$res);
    внутренний субпаттерн - условие пропуска текста в div
     
Статус темы:
Закрыта.