Помогите составить регулярное выражение

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

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

    ivan_st Постоялец

    Регистр.:
    11 май 2008
    Сообщения:
    52
    Симпатии:
    8
    есть кусок кода:
    ХОРОШИЙ_ТЕКСТ&ei=Bla-bla-bla&ХОРОШИЙ_ТЕКСТ
    требуется удалить функцией replace(Reg_Exp, ""):
    &ei=Bla-bla-bla
    чтобы осталось:
    ХОРОШИЙ_ТЕКСТ&ХОРОШИЙ_ТЕКСТ
    (Bla-bla-bla - м.б. разным)

    таких выражений (одинаковых) м.б. несколько

    Спасибо.
     
  2. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Язык непонятно какой тебе нужен, поэтому на пхп - приблизительно так:
    PHP:
    $text "ХОРОШИЙ_ТЕКСТ&ei=Bla-bla-bla&ХОРОШИЙ_ТЕКСТ&ei=Bla-bla-bla&ПЛОХОЙ ТЕКСТ";
    $text preg_replace('|&ei=[^&]+|'''$text);
    echo 
    $text;
    Результат -
    HTML:
    ХОРОШИЙ_ТЕКСТ&ХОРОШИЙ_ТЕКСТ&ПЛОХОЙ ТЕКСТ
    Синтаксис регекспов в большинстве языков похожий, так что можно легко адаптировать под другой язык.
     
    ivan_st нравится это.
  3. ivan_st

    ivan_st Постоялец

    Регистр.:
    11 май 2008
    Сообщения:
    52
    Симпатии:
    8
    ох, извините, это оказался Javascript! :ay:

    вот аналогичный код с хелпа
    // Replace all instances of the DIV tag with an empty string
    var oRegEx = /<div[^>]*>(.*?)<\/div>/gi;
    oBody = oBody.replace(oRegEx, "");

    задача та же.
    Регулярка для меня темный лес.
     
  4. jami

    jami Постоялец

    Регистр.:
    10 авг 2011
    Сообщения:
    114
    Симпатии:
    39
    Синтаксис регулярки по идее не меняется:
    HTML:
    
    var oRegEx = /&amp;ei=[^&]+/gi; //i - модификатор "игнорировать регистр символов", можно его убрать
    oBody = oBody.replace(oRegEx, "");
    
    На работоспособность не проверял - возможно, как есть она не заведется, потребуется экранировать \& , отлаживается все это консолью Firebug.
     
    ivan_st нравится это.
  5. ivan_st

    ivan_st Постоялец

    Регистр.:
    11 май 2008
    Сообщения:
    52
    Симпатии:
    8
    можно здесь, чтоб темы не плодить:

    составил кое-как, работает, но
    проблема в том из-за <strong>195473 - пришлось в паттерн вставить ">"
    но <strong> может быть а может и не быть (или м.б. что-то еще)
    Вообще требуется вычленить 3 числа по опорным словам.
    BLA-BLA ОпорноеСлово1: BLA-BLA 111111 BLA-BLA ОпорноеСлово2: BLA-BLA 222222 ОпорноеСлово3: BLA-BLA 333333 BLA-BLA
    и эти бла-бла могут без пробелов примыкать.
    PHP:
      $text "bla-bla-bla\">ОпорноеСлово1: <strong>111111</strong> • ОпорноеСлово2: <strong>222222<strong> ОпорноеСлово3: <strong>333333</strong> "
      
    $pattern "|.+ОпорноеСлово1:\s+.+>(\d+).+\s+ОпорноеСлово2:\s+.+>(\d+).+\s+ОпорноеСлово3:\s+.+>(\d+).+\s+|";
      if(
    preg_match($pattern$text$out))
      {
        
    $t1 $out[1];
        
    $t2 $out[2];
        
    $t3 $out[3];
        echo 
    "Полученные значения<br >$t1 $t2 $t3";
      }
    Хуже другое , еще м.б и такое (цифры перед словами)
    BLA-BLA 111111 BLA-BLA ОпорноеСлово1: BLA-BLA 222222 BLA-BLA ОпорноеСлово2: 333333 BLA-BLA ОпорноеСлово3: BLA-BLA
    понятное дело я переверну в паттерне, и могу проверить массив на Empty

    Не парится и сделать как я написал, или все можно в один паттерн впихнуть. (эффективность особо не волнует), важнее стабильность.
     
Статус темы:
Закрыта.