Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.111.183] |
|
Страницы: (4) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как вы заметили у нас в форуме тег CODE вставляется так:
(например) [ CODE=pas ] ** [/CODE] Юзер вставляет курсор в пустую строку ** и добавляет туда текст, получается вот чего: [ CODE=pas ] (лишний \n) MySuperProgram1 MySuperProgram2 (лишний \n) [/CODE] и так программа из-за этого выглядит так: MySuperProgram1 MySuperProgram2 Как бы убрать эти лишние \n если они есть при сохранении поста так: [ CODE=pas ]MySuperProgram1 MySuperProgram2[/CODE] и тогда тег CODE будет выглядеть так красиво: MySuperProgram1 MySuperProgram2 Короче нужно регулярное выражение. Также нужно учесть что code может быть без указания синтаксиса, просто [ code ] .. [ /code ] |
Сообщ.
#2
,
|
|
|
$data = <<<DATA [сODE=pas] ** [/сODE] DATA; echo preg_replace('#\s*(\[сode(?:\=[a-z]+)?\])\s*(.*?)\s*(\[/сode\])\s*#si','$1$2$3',$data); |
Сообщ.
#3
,
|
|
|
Цитата SiMM, 11.11.04, 09:11 Начальный и завершающий \s* - по вкусу спасибо. а что он даёт? |
Сообщ.
#4
,
|
|
|
пробелы
|
Сообщ.
#5
,
|
|
|
/(\[code\b[^\]]*\])\r\n(.*?)\r\n(\[/code\])/si
заменить на $1$2$3 Цитата SiMM, 11.11.04, 12:11 echo preg_replace('#\s*(\[сode(?:\=[a-z]+)?\])\s*(.*?)\s*(\[/сode\])\s*#si','$1$2$3',$data); Так могут и пробелы в начале и в конце откусться. |
Сообщ.
#6
,
|
|
|
Mixxx, в конце в них нет особого смысла, а в начале - это ещё надо подумать чуток (если стоит), чтобы ситуация, когда введено "[CODE]\s\r\n\s\r\n\s\sкод программы\s\s\s\r\n\n\r\n\r\n[/CODE]" преобразовываалась в "[CODE]\s\sкод программы[/CODE]
Добавлено И кстати, \r\n - это разве что под виндой на практике может быть только \n (*nix?) или только \r (Mac?) |
Сообщ.
#7
,
|
|
|
\n
Добавлено Цитата SiMM, 11.11.04, 11:26 Mixxx, в конце в них нет особого смысла, а в начале - это ещё надо подумать чуток (если стоит), пробелы должны сохраняться, т.к. в любом коде есть отступы. И даже если они на первой строчке, всё-равно это отступы. |
Сообщ.
#8
,
|
|
|
Song, вообще-то я говорил о первых пустых строках, которые могут содержать и пробелы в том числе (а не о пробелах в первой строке - да, каюсь, изначально я о них не подумал), и о пустых строках/пробелах в конце - там они ни к чему. Либо приведите реальный пример, где это (пробелы и пустые строки в конце кода) критично.
|
Сообщ.
#9
,
|
|
|
ну например:
[ CODE ] t:=1; [ /CODE ] сначала идёт \n потом пробел, потом текст |
Сообщ.
#10
,
|
|
|
Song, я же просил пример, когда пробелы и пустые строки критичны в конце исходника
|
Сообщ.
#11
,
|
|
|
а так регулярка у тебя в начале правильно отрабатывает? только в конце "неправильно" ?
Добавлено Попробовал, не работает, почему не понятно: [ CODE=pas ] test [ /CODE ] = test test |
Сообщ.
#12
,
|
|
|
Song,
(\[code\b[^\]]*\])[\r\n]+(.*?)[\r\n]+(\[\/code\]) заменить на $1$2$3 ключи si А ещё лучше два регекспа, они будут работать быстрее предыдущего который содержит метасимвол ".*?" с минимальным квантификатором. (\[code\b[^\]]*\])[\r\n]+ заменить на $1 ключ i [\r\n]+(\[\/code\]) заменить на $1 ключ i |
Сообщ.
#13
,
|
|
|
Mixxx,
в форум я вставил вот такую регулярку // cut \n at begin and end of code tag text $txt = preg_replace("#\s*(\[сode(?:\=[a-z]+)?\])\s*(.*?)\s*(\[/сode\])\s*#si", "$1$2$3", $txt); вот она и не работает |
Сообщ.
#14
,
|
|
|
Song, я же предупреждал, что буквы с я написал по русски - замените на английские.
|
Сообщ.
#15
,
|
|
|
из js файла вставляется [ code=pas ]\ n\ n[/code]
Поэтому должно. Но даже если так, есть мысли как исправить? Добавлено Цитата SiMM, 11.11.04, 19:01 Song, я же предупреждал, что буквы с я написал по русски - замените на английские. спасибо, я видел что ты предупреждал но я думал, что это касалось вот этого: Цитата SiMM, 11.11.04, 09:11 [сODE=pas] ** [/сODE] Щас потестю. Добавлено В принципе ничего, но вырезается первый пробел. Например [сode](один пробел)test (один пробел)test (два пробела)test[/сode] получаетcя test test test И ещё непонятно для чего после [/сode] вырезается \n т.е. пишу [сode] \n - вырезается 1 2 \n - вырезается [/сode]\n - почему этот вырезается? [другой тег] |