На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
Закрыто Mastilior 06-06-2005:

Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
  • закрыта
> Помогите настроить регулярное вырожение , на php
    Привет
    Вот сетуация такая, нужно регулярное выражение, спомощью которого можно было вырезать нужное значение.
    т.е.
    папример есть строка:
    №1
    ExpandedWrap disabled
       строка такая то, а вот CD нужно вырезать

    т.е. "CD" нужно вырезать

    но если так:
    №2
    ExpandedWrap disabled
       строка такая то, а вотCDнужно вырезать

    то "CD" - не рогать.

    я пишу:
    ExpandedWrap disabled
        "/[^<>]*?CD>.*?/"

    вырезаеть только с одно края, а с другого не хочет, и вырезает таже если строка №2, ну собственного говоря, то что не вырезает из строки №2 - это одалось. Я с этим так и не смог справиться.

    Помогите пожалуйсто!


    Зарание спасибо.
    Сообщение отредактировано: maxim84_ -
      ExpandedWrap disabled
        preg_match("/(^|[^\w])(CD)($|[^\w])/", $str, $matches);
        echo $matches[2];
        ExpandedWrap disabled
          use locale;
          ($,, $\)=("\t", "\n");
          print ++$i, /\b(CD)\b/gio while <DATA>;
           
          __DATA__
          строка такая то, а вот CD нужно вырезать
          строка такая то, а вотCDнужно вырезать
          CD строка такая то, а вот CD нужно вырезать
          строка такая то, а вот нужно вырезат ь CD
          Mastilior, слушай, если не вырезать, а просто заменить на что ни будь, то как будет выглядеть выражение? че то у меня с ними вообще кашмар!! ксатате нет нормально инфы по рег. выражениям?

          Добавлено
          инфу уже нашел! :yes:

          вот еще че заметил когда ставишь перед или после "CD" какой нить спец. знак ну "/","№","&", то выражение срабатывает, а можно указать диапазоп всех спец знаков? ну типа как [a-z]? если, да, то как... сто бы при встречи допустим "&CD_" выражение не сробатывало.
          Сообщение отредактировано: maxim84_ -
            Цитата maxim84_ @
            Mastilior, слушай, если не вырезать, а просто заменить на что ни будь, то как будет выглядеть выражение? че то у меня с ними вообще кашмар!! ксатате нет нормально инфы по рег. выражениям?

            Выражение будет выглядеть также, но только пользоваться ты будешь уже preg_replace'ом.
              ГЫ!

              так вот я и говорю, что оно срабатывает если стоят, или в начале, или в конце "CD".
              ну жно что ниче не менялось если даже:

              Цитата
              строка такая то, а вот $CD$ нужно вырезать

              т.е. даже если рядом стоят спец. символы.
              Выражение не только сробатывает, но и еще обрезает сиволы вокруг "CD"
              т.е.
              Цитата
              строка такая то, а вот $CD$ нужно вырезать


              а на выходе получем:
              Цитата
              строка такая то, а вот CD нужно вырезать


              тоже самое и с пробелами:
              Цитата
              строка такая то, а вотCDнужно вырезать
              Сообщение отредактировано: maxim84_ -
                Ты уж определись.
                Отметь жирным часть строки, которую надо удалить.
                Покажи несколько вариантов строк.
                  Цитата
                  Ты уж определись.
                  Отметь жирным часть строки, которую надо удалить.
                  Покажи несколько вариантов строк.


                  :o

                  а я положения и не менял!! просто выше указаное выражение вырезает даже если к нужному слову прилегают спец. сиволы т.е. "#CD#" или "#CD*" в таких случаех ниче не делать! т.е. не вырезать.
                  В предыдущем посте я сказал как выражение работает с заменой.

                  А про замену я спросил т.к. нужно было заменить! в общем это вырожение годиться, но только когда заменяет уберает пробелы возе "CD", вот я и поинтересовался как сделать, что б при выдилении пробелы сохранялись!

                  кароче так! подведу итог выше сказанного:
                  Нужно вырожение которое вырезает или выделяет нужное слово, в нашем случае - это "CD".
                  №1
                  Цитата
                  строка такая то, а вот CD нужно вырезать

                  в этом случае вырезаем или заменяем и сохраняем пробелы

                  №2
                  Цитата
                  строка такая то, а вот @CD* нужно вырезать

                  ниче не делаем т.к. возле нужного слова есть спец. символы. символы могут находиться как с одно стороны так и сдругой по отдельности т.е.

                  №3
                  Цитата
                  строка такая то, а вот *CD нужно вырезать

                  или так
                  №4
                  Цитата
                  строка такая то, а вот CD* нужно вырезать



                  Понятно? или опять нет?
                  Сообщение отредактировано: maxim84_ -
                    Что выделено жирным - то и нахожу:
                    ExpandedWrap disabled
                      use locale;
                       
                      $str='CD';
                      ($,, $\)=(")\t(", ")\n");
                       
                      print ++$i, /
                      (
                          (?:
                              ^   |
                              \W
                          )?
                      ) (
                          \Q$str\E
                      ) (
                          (?:
                              \W  |
                              $
                          )?
                      )
                      /iox while <DATA>;
                       
                      __DATA__
                      строка такая то, а вот CD нужно вырезать
                      строка такая то, а вот @CD* нужно вырезать
                      строка такая то, а вот *CD нужно вырезать
                      строка такая то, а вот CD* нужно вырезать

                    Но сдаётся мне одно из двух: то ли ты не выкладываешь задачу как есть, толи ты сам пока ещё не понял что хочешь получить.

                    Добавлено
                    Выход:
                    ExpandedWrap disabled
                      1)  ( ) (CD)    ( )
                      2)  (@) (CD)    (*)
                      3)  (*) (CD)    ( )
                      4)  ( ) (CD)    (*)
                      твое выражение опять же срабатывает при присутствии спец сиволов.
                      Строки какие я привожу это не постоянные, или меняються, т.е. комбинация положения "CD" может быть разное.
                      но я не так делаю как ты, я через
                      ExpandedWrap disabled
                        preg_replace

                      может по этому такая разница?

                      Цитата
                      Что выделено жирным - то и нахожу:

                      ты не понял! искать нужно исключительно "CD"
                      строки №2-4 являються примером когда выражение не должно срабатывать следовательно не выделяться или не вырезаться..

                      давай без вырезание просто на замену!
                      например нужно CD заменить на "<b>CD</B>" тем самым выделив ее в тексте.

                      блин ну как объяснить то???
                      кароче как подсветка синтексиса, если оператор в чистов виде т.е. допустим and, то выделяеться, стоит его изменить на #and то подсветка снимаеться! так понятней?
                      Сообщение отредактировано: maxim84_ -
                        maxim84_, то есть заменять можно только, если вокруг CD стоят пробелы? Скажи, какие именно символы могут стоять.
                          ExpandedWrap disabled
                            use locale;
                             
                            $str='CD';
                            ($,, $\)=(")\t(", ")\n");
                             
                            print ++$i, $_ foreach
                            '
                            строка такая то, а вот CD нужно вырезать
                            строка такая то, а вот @CD* нужно вырезать
                            строка такая то, а вот *CD нужно вырезать
                            строка такая то, а вот CD* нужно вырезать
                            строка такая то, а вотCD* нужно вырезать
                            строка такая то, а вот CD*нужно вырезать
                            '
                            =~
                            /
                            (
                                (?:
                                    ^   |
                                    \s
                                )
                                \W?
                                      \Q$str\E
                                \W?
                                (?:
                                    \s  |
                                    $
                                )
                            )
                            /gmiox

                          Напиши примеры строк в одном блоке, а в другом строки, которые надо получить. Может хоть так тебя можно будет понять.
                            Tishaishii, твое выражение не работает.. че не понятно то??
                            Mastilior, да пробелы, и еще "(", ")", "=" и все.
                              Ну дык в чем проблема-то? :huh: Тем более, инфу, говоришь, уже нашел.
                              ExpandedWrap disabled
                                /(^|[\s\(\)\=])(CD)($|[\s\(\)\=])/
                                Цитата
                                Ну дык в чем проблема-то? Тем более, инфу, говоришь, уже нашел

                                Ну дык, я нашел, в стандартной справке по php, а там каряво написано!! вот сутки же пытаюст разробраться и все без успешно! :(

                                за выражение спасибо ща проверю!
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Закрыто Mastilior 06-06-2005:



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0468 ]   [ 15 queries used ]   [ Generated: 7.05.24, 07:56 GMT ]