
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (4) 1 [2] 3 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Song, так убери лишнее
![]() PCRE, Регулярные выражения, часть I + часть II Цитата Song, 11.11.04, 20:11 Сразу после [ code ] в регулярнике меняешь \s* на [\n\r]* (думать более красиво - лениво В принципе ничего, но вырезается первый пробел. ![]() Цитата Song, 11.11.04, 20:11 Убери поставленный в конце "по вкусу" \s*, т.е. (\[/code\])\s*# => (\[/code\])# И ещё непонятно для чего после [/сode] вырезается \n |
Сообщ.
#17
,
|
|
|
спасибо
Ок ![]() а перед [ code ] почему \n убирается? ![]() [ b ] test [ /b ] [ code ] code [ /code] [ b ] test [ /b ] получается после отработки [ b ] test [ /b ][ code ] code [ /code] [ b ] test [ /b ] |
Сообщ.
#18
,
|
|
|
Цитата Song, 11.11.04, 21:51 Благодаря добавленной по вкусу \s* вначале. #\s*(... => #(... а перед [ code ] почему \n убирается? |
Сообщ.
#19
,
|
|
|
Спасибо SiMM!
Вроде все варианты проверил! + 1 dgm ( До селе вроди так было P.S. Но если вдруг чего обнаружу, уж не откажи поправить ![]() |
Сообщ.
#20
,
|
|
|
Ещё вопросик, сделал тег [ IMG=alt ] адрес [ /IMG ]
Сначала у меня был такой вариант: ![]() ![]() preg_replace( "#\[img\s*=\s*(\S+?)\s*\](.*?)\[\/img\]#ie", ..... но он не работал когда в качестве alt'а указывается слово с пробелами, ну т.е. из нескольких слов: =xxx - так работает =xxx yyy - так не работает я заменил на ![]() ![]() preg_replace( "#\[img\s*=\s*(.*?)\s*\](.*?)\[\/img\]#ie" , Внимание вопрос! (© что где когда ![]() Правильно ли я сделал? с точки зрения правильности, защиты от XSS нападения, etc... |
Сообщ.
#21
,
|
|
|
Недостаток твоей регулярки в том, что она не отрабатывает тэги без указания alt'а (т.е. [img]адрес[/img] работать не будет). Я бы сделал строку поиска такой '#\[img\s*(?:=\s*?(.*)|)?\s*\](.*)\[/img\]#Uie'.
А вот по поводу защиты от XSS-нападения, к сожалению, ничего сказать не могу - не знаком с такой брешью. |
Сообщ.
#22
,
|
|
|
Цитата SiMM, 18.11.04, 12:24 Недостаток твоей регулярки в том, что она не отрабатывает тэги без указания alt'а (т.е. [img]адрес[/img] работать не будет). для неё отдельная регулярка Добавлено А вообще можно ламеру сказать что такое .*? в рег. выражении, т.к. именно это я изменил. Я \S+? поменял на .*? |
Сообщ.
#23
,
|
|
|
Song,
Шаблон .* очень жадный - ест всё до конца строки. Для устранения этой проблемы ставится еще и знак вопроса. |
Сообщ.
#24
,
|
|
|
ок тогда другой вопрос: почему в первом варианте не работало с двумя словами?
|
Сообщ.
#25
,
|
|
|
Цитата Song, 18.11.04, 14:50 ок тогда другой вопрос: почему в первом варианте не работало с двумя словами? ![]() ![]() preg_replace( "#\[img\s*=\s*(\S+?)\s*\](.*?)\[\/img\]#ie", ..... Потому что, после "[img = " (\[img\s*=\s*) он находил n-ное кол-во НЕпробельных символов - "xxx" ((\S+?)), и далее еще один пробел " " (\s*). Затем в строке по шаблону должна была идти одна закрывающаяся квадратная скобка "]" (\]), когда в обрабатываемой строке еще оставалось "yyy". На этом обработка и завершалась, без результата. |
Сообщ.
#26
,
|
|
|
Цитата Mastilior, 18.11.04, 13:44 ...либо используется модификатор U, чтобы сменить логику на противоположную.Шаблон .* очень жадный - ест всё до конца строки. Для устранения этой проблемы ставится еще и знак вопроса. Цитата Song, 18.11.04, 13:50 Потому что между словами был недопустим "пробельный" символ. почему в первом варианте не работало с двумя словами? |
Сообщ.
#27
,
|
|
|
SiMM, т.е. только пробел и недопустим?
Добавлено А как переделать \S+? чтобы ещё пробел допускался? |
Сообщ.
#28
,
|
|
|
.*?
![]() |
Сообщ.
#29
,
|
|
|
Цитата Song, 18.11.04, 15:26 А как переделать \S+? чтобы ещё пробел допускался? Лучше уж тогда писать ([^\]]*?) - до первого появления закрывающейся скобки. Добавлено Цитата SiMM, 18.11.04, 15:31 .* .+ было бы неправильно - а вдруг напишут [img]урл[/img] SiMM быстрее ![]() Song, если используешь .*, не забудь про то, что говорил SiMM в предыдущем посте. Уже исправил :) |
Сообщ.
#30
,
|
|
|
Цитата SiMM, 18.11.04, 13:31 .*? .+? было бы неправильно - а вдруг напишут [img]урл[/img] ну и пусть напишут, в ф-ию обработки параметр попадает пустым, а там проверка ![]() ![]() if ( !$alt ) $alt = "user posted image"; Добавлено А Цитата SiMM, 18.11.04, 13:31 разве спасёт от [ img=] ? .*? |