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

      заменить последовательности: [ABC=abc] на нечто типа [QWE="abc"]

      Знаю, можно как-то притулить регулярные выражения... но вот как? опыта не умею... не знаю...
        не совсем понятно задание?
        нужно конкретно именно ABC=abc менять на QWE="abc"
        или это целые классы выражений, т.е. XXX=xxx -> YYY="xxx"
        где X - любая большая буква латиницы, x - любая маленькая, Y- какая-то наперед заданная?
          [quoteнужно конкретно именно ABC=abc менять на QWE="abc"[/quote]
          Да. Конкретно на конкретно.
            Ты можеш просто читать строку и искать в ней эту последовательность а потом менять..
            Все функции нужные для этого есть в PHP Manual @ PHP. Помойму без этого мануала вообще некуда деватся.
              Согласен, но сделать первый шаг помогите, плиз...
              Перерыть кучу функций, разобраться какие из них хуже/луше... :(

              А нужно:
              1. Найти № символа с которого начинается в заданной строке $strOrg искомая $strMy1
              2. Заменить подстроку $strMy1 на строку $strMy2 в строке $strOrg - это сделает
              ExpandedWrap disabled
                str_replace( $strMy1, $strMy2, $strOrg);

              Но только она заменит ВСЕ вхождения $strMy1 в $strOrg, а мне нужно только одно!
              3. Вставить строку $strMy3 с нужной позиции в строку $strOrg

              Как эти вещи поделать? Хэлп, плиз.
                1. strpos ( $strOrg, $strMy1 );
                2. Ничего лучше чем
                $out = substr ( $strOrg, 0, strpos( $strOrg, $strMy1)) . $strMy2 . substr ( strstr ( $strOrg ) , strlen ( $strMy1 ))
                3.
                $out = substr ( $strOrg, 0, $pos ) . $strMy3 . substr ( $strOrg , $pos)
                  ExpandedWrap disabled
                     preg_replace("/ABC=abc/", "QWE=\"abc\"", $strText, 1);

                  Работает, если я правильно понял то что ты хочешь сделать. Заменяет первое вхождение. Если надо все, опусти последний параметр.
                  Сообщение отредактировано: vil -
                    Дело в том, что abc - заранее неизвестно, это как бы передаваемый параметр...
                      Так тебя же спросили тебе точно надо заменить или нет. А теперь оказывается что ты не знаешь, что конкретно надо заменить.
                      тогда тебе надо использовать это
                      preg_replace("/ABC=abc/", "QWE=\"abc\"", $strText, 1);

                      но вместо abc подставь свою строку, только обработай ее на предмет всяких спец символов. Для этого функция есть, в разделе работы с регулярными выражениями. там же где preg_replace
                        Ну тогда что-то типа
                        ExpandedWrap disabled
                          preg_replace("/ABC=".addslashes($search)."/", "QWE=\"abc\"", $strText, 1);

                        Только я не уверен что он все символы проэкранирует...
                          И откуда мне этот
                          ExpandedWrap disabled
                            $search
                          взять???

                          Вот ты попробуй в этом форуме вставить урл-адрес при помощи кнопки http://
                          Получишь что-то такое:
                          [ URL = http:// abc ]My Webpage[ / URL ]

                          Вот тебе пример того, что в качестве $search, может быть что угодно...

                          результирующая строка ляжет в БД, а при извлечении её вот эти квадратные корявки [ URL ] будут заменены на <A HREF="...

                          Как такое сделать?

                          Добавлено в :
                          Цитата
                          SergeS, 28.04.04, 23:14
                          1. strpos ( $strOrg, $strMy1 );
                          2. Ничего лучше чем
                          $out = substr ( $strOrg, 0, strpos( $strOrg, $strMy1)) . $strMy2 . substr ( strstr ( $strOrg ) , strlen ( $strMy1 ))
                          3.
                          $out = substr ( $strOrg, 0, $pos ) . $strMy3 . substr ( $strOrg , $pos)

                          Наверное лучшего не придумаешь...
                          Хоть и медленно, но надёжно. Так?
                            Теперь понятно чего ты хочешь
                            Я просто сначала не понял

                            Вот тебе решение твоей проблемы:
                            ExpandedWrap disabled
                              preg_replace("/ABC=(\S+)/", "QWE=\"\\1\"", $strText, 1);


                            А вот например из
                            ExpandedWrap disabled
                              [ URL = http:// abc ]My Webpage[ / URL ]
                            в
                            ExpandedWrap disabled
                              <a href="http://abc">My Webpage</a>


                            ExpandedWrap disabled
                                $strText = "[ URL=http://abc]My Webpage[/URL]";
                                $out = preg_replace(
                              "/\[\s*URL\s*=\s*(\"|\'|)([^\s\"]+)\\1\s*\](.*)\[\s*\/URL\s*\]/",
                              "<a href=\"\\2\">\\3</a>",
                              $strText
                              );
                            Сообщение отредактировано: vil -
                              УУУУУУ....

                              а не мог бы ты расшифровать
                              ExpandedWrap disabled
                                "/ABC=(\S+)/"

                              и
                              ExpandedWrap disabled
                                "QWE=\"\\1\""


                              Что обозначают символ "/", в частности здесь: /ABC
                              А символ "\" - "\S"???
                                vil,
                                а как последнее отнесётся к
                                ExpandedWrap disabled
                                  [URL=http://someurl/" onclick="....]
                                  Цитата Budda @ 29.04.04, 17:24
                                  УУУУУУ....

                                  а не мог бы ты расшифровать
                                  ExpandedWrap disabled
                                    "/ABC=(\S+)/"

                                  и
                                  ExpandedWrap disabled
                                    "QWE=\"\\1\""


                                  Что обозначают символ "/", в частности здесь: /ABC
                                  А символ "\" - "\S"???

                                  2Budda
                                  / - начало и конец регулярки
                                  \S любой непробельный символ
                                  \" - просто экранированая двойная кавычка как символ
                                  \\1 - результат поиска первого субпатерна в данном случае \S+, то есть любое количество >0 непробельных символов.

                                  А вообще это все перловские регулярки, почитай Regular Expressions.

                                  2SergeS
                                  хреново он отнесется, в принципе такой задачи не стояло, но если надо то вот держи:
                                  ExpandedWrap disabled
                                     
                                    $strText = "[ URL=http://abc]My Webpage[/URL]";
                                      $out = preg_replace(
                                    "/\[\s*URL\s*=\s*(\"|\'|)([^\s\"]+)\\1\s*(.*)\](.*)\[\s*\/URL\s*\]/",
                                    "<a href=\"\\2\" \\3>\\4</a>",
                                    $strText
                                    );


                                  ЗЫ Ты перед http специально не поставил кавычку?
                                  ЗЗЫ2 все-таки наверное правильнее с твоей стороны было бы написать
                                  ExpandedWrap disabled
                                    $strText="[URL=http://someurl/\" onclick=\"....\"  ]...[/URL]"

                                  А то я долго не мог понять что значат двойные кавычки.
                                  Сообщение отредактировано: vil -
                                    vil,
                                    Просто то что я написал выше - продырявливает половину форумов в началах :) - и без слешов
                                      Budda, слушай, ты это специально, или прикалываешься? я тебе сначала даже рейтинг хотел понизить.. за полное отсутствие желания разобраться самому, и требования чтобы тебе все разжевали и в рот положили.
                                      ты ж не новичек на форуме, зачем такие глупости городишь?

                                      типа
                                      "как вывести число на экран в с++"
                                      - "просто конкретное число?"
                                      " да"
                                      - "printf("5");
                                      "нет, а если число неизвестно?"
                                      - "printf("%d",num);
                                      "а где num брать? а что такое %?"

                                      .....

                                      что за даунизм???

                                      почитай мануал, про строковые фукнции php, про регулярные выражения и т.п. тем более это есть на русском (www.php.net, дальше documentation и выбираешь russian) и читать не так много...
                                        Цитата
                                        Budda, слушай, ты это специально, или прикалываешься? я тебе сначала даже рейтинг хотел понизить.. за полное отсутствие желания разобраться самому, и требования чтобы тебе все разжевали и в рот положили.
                                        ты ж не новичек на форуме, зачем такие глупости городишь?


                                        Прости, что приходится напрягать, нет не прикалываюсь...

                                        Но действительно не могу въехать... и мануал читал...
                                        Может если бы я больше ничего не знал, то читал бы более вдумчиво, не знаю, может лучше бы дошло...

                                        Цитата
                                        \S любой непробельный символ
                                        \\1 - результат поиска первого субпатерна в данном случае \S+, то есть любое количество >0 непробельных символов.

                                        Вот этого и сейчас в мануале не вижу... специально посмотрел ещё раз...

                                        Прошу прощения, ещё раз, что напряг сильно... :(

                                        :'(
                                          Цитата SergeS @ 29.04.04, 20:32
                                          vil,
                                          Просто то что я написал выше - продырявливает половину форумов в началах :) - и без слешов

                                          В смысле продырявливает? Моя регекспа просто ничего не меняет..., потому как понятно что ссылка неправильная.

                                          При чем что первый, что второй вариант.
                                          Сообщение отредактировано: vil -
                                            Смотря какой скрипт вложить в онКлик... :)
                                              Цитата Budda @ 30.04.04, 11:08
                                              Цитата
                                              \S любой непробельный символ
                                              \\1 - результат поиска первого субпатерна в данном случае \S+, то есть любое количество >0 непробельных символов.

                                              Вот этого и сейчас в мануале не вижу... специально посмотрел ещё раз...

                                              Вот здесь много что написано.
                                              Прикреплённый файлПрикреплённый файлregexp.doc (159 Кбайт, скачиваний: 376)
                                                Цитата
                                                Budda, 30.04.04, 11:08
                                                Вот этого и сейчас в мануале не вижу... специально посмотрел ещё раз...

                                                какой мануал смотрел?

                                                см по функциям preg_match, preg_replace,...
                                                все что касается preg (perl regular expressions), там должна быть ссылка на описане этих самых регекспов
                                                  Budda, я изучал регэкспы по этому http://myphp.net.ru/doc/index.php?regexp-intro и этому http://myphp.net.ru/lessons/index.php?14, вошло безболезненно, глянь и ты =).
                                                    Цитата
                                                    см по функциям preg_match, preg_replace,...

                                                    Там только - regular expression, а линка нет.

                                                    А мануалы хорошие, сенкс... :)
                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                    0 пользователей:


                                                    Рейтинг@Mail.ru
                                                    [ Script execution time: 0,0690 ]   [ 15 queries used ]   [ Generated: 27.04.24, 08:38 GMT ]