На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
Страницы: (4) 1 [2] 3 4  все  ( Перейти к последнему сообщению )  
    > Регулярку бы.. :) , выкусить лишний перевод строки
      Song, так убери лишнее ;)
      PCRE, Регулярные выражения, часть I + часть II
      Цитата Song, 11.11.04, 20:11
      В принципе ничего, но вырезается первый пробел.
      Сразу после [ code ] в регулярнике меняешь \s* на [\n\r]* (думать более красиво - лениво ;) - похоже, оно вам не надо)
      Цитата Song, 11.11.04, 20:11
      И ещё непонятно для чего после [/сode] вырезается \n
      Убери поставленный в конце "по вкусу" \s*, т.е. (\[/code\])\s*# => (\[/code\])#
        спасибо
        Ок :)
        а перед [ code ] почему \n убирается? :)

        [ b ] test [ /b ]
        [ code ] code [ /code]
        [ b ] test [ /b ]

        получается после отработки
        [ b ] test [ /b ][ code ] code [ /code]
        [ b ] test [ /b ]
          Цитата Song, 11.11.04, 21:51
          а перед [ code ] почему \n убирается?
          Благодаря добавленной по вкусу \s* вначале. #\s*(... => #(...
            Спасибо SiMM!
            Вроде все варианты проверил!
            + 1 dgm ( До селе вроди так было

            P.S. Но если вдруг чего обнаружу, уж не откажи поправить :)
            Сообщение отредактировано: SergeS -
              Ещё вопросик, сделал тег [ IMG=alt ] адрес [ /IMG ]
              Сначала у меня был такой вариант:
              ExpandedWrap disabled
                preg_replace( "#\[img\s*=\s*(\S+?)\s*\](.*?)\[\/img\]#ie", .....

              но он не работал когда в качестве alt'а указывается слово с пробелами, ну т.е. из нескольких слов:
              =xxx - так работает
              =xxx yyy - так не работает

              я заменил на
              ExpandedWrap disabled
                preg_replace( "#\[img\s*=\s*(.*?)\s*\](.*?)\[\/img\]#ie" ,
              - так работает

              Внимание вопрос! (© что где когда :))
              Правильно ли я сделал?
              с точки зрения правильности, защиты от XSS нападения, etc...
                Недостаток твоей регулярки в том, что она не отрабатывает тэги без указания alt'а (т.е. [img]адрес[/img] работать не будет). Я бы сделал строку поиска такой '#\[img\s*(?:=\s*?(.*)|)?\s*\](.*)\[/img\]#Uie'.
                А вот по поводу защиты от XSS-нападения, к сожалению, ничего сказать не могу - не знаком с такой брешью.
                  Цитата SiMM, 18.11.04, 12:24
                  Недостаток твоей регулярки в том, что она не отрабатывает тэги без указания alt'а (т.е. [img]адрес[/img] работать не будет).

                  для неё отдельная регулярка

                  Добавлено
                  А вообще можно ламеру сказать что такое .*? в рег. выражении, т.к. именно это я изменил. Я \S+? поменял на .*?
                    Song,
                    Шаблон .* очень жадный - ест всё до конца строки. Для устранения этой проблемы ставится еще и знак вопроса.
                      ок тогда другой вопрос: почему в первом варианте не работало с двумя словами?
                        Цитата Song, 18.11.04, 14:50
                        ок тогда другой вопрос: почему в первом варианте не работало с двумя словами?

                        ExpandedWrap disabled
                          preg_replace( "#\[img\s*=\s*(\S+?)\s*\](.*?)\[\/img\]#ie", .....

                        Потому что, после "[img = " (\[img\s*=\s*) он находил n-ное кол-во НЕпробельных символов - "xxx" ((\S+?)), и далее еще один пробел " " (\s*). Затем в строке по шаблону должна была идти одна закрывающаяся квадратная скобка "]" (\]), когда в обрабатываемой строке еще оставалось "yyy". На этом обработка и завершалась, без результата.
                          Цитата Mastilior, 18.11.04, 13:44
                          Шаблон .* очень жадный - ест всё до конца строки. Для устранения этой проблемы ставится еще и знак вопроса.
                          ...либо используется модификатор U, чтобы сменить логику на противоположную.
                          Цитата Song, 18.11.04, 13:50
                          почему в первом варианте не работало с двумя словами?
                          Потому что между словами был недопустим "пробельный" символ.
                            SiMM, т.е. только пробел и недопустим?

                            Добавлено
                            А как переделать \S+? чтобы ещё пробел допускался?
                              .*? ;) .+? было бы неправильно - а вдруг напишут [img=]урл[/img]
                              Сообщение отредактировано: SiMM -
                                Цитата Song, 18.11.04, 15:26
                                А как переделать \S+? чтобы ещё пробел допускался?

                                Лучше уж тогда писать ([^\]]*?) - до первого появления закрывающейся скобки.

                                Добавлено
                                Цитата SiMM, 18.11.04, 15:31
                                .* .+ было бы неправильно - а вдруг напишут [img]урл[/img]

                                SiMM быстрее ;)

                                Song, если используешь .*, не забудь про то, что говорил SiMM в предыдущем посте. Уже исправил :)
                                  Цитата SiMM, 18.11.04, 13:31
                                  .*? .+? было бы неправильно - а вдруг напишут [img]урл[/img]

                                  ну и пусть напишут, в ф-ию обработки параметр попадает пустым, а там проверка
                                  ExpandedWrap disabled
                                    if ( !$alt ) $alt = "user posted image";


                                  Добавлено
                                  А
                                  Цитата SiMM, 18.11.04, 13:31
                                  .*?
                                  разве спасёт от [ img=] ?
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:
                                  Страницы: (4) 1 [2] 3 4  все


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0608 ]   [ 15 queries used ]   [ Generated: 4.07.25, 23:59 GMT ]