На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Работа со строками , в 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 -
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


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