myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> string.gsub, string.gsub замена > < аналогом < >

Теги
Нет тегов для показа
foXDEvil
сообщение 20.9.2010, 20:03
Сообщение #1


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




Ранее такого не делал и возникли проблемы.
У меня лог чата создаётся в формате html и всё это дело идёт на сайт.
Так вот в целом то работает, но почему та он хочет использовать string.gsub тольк один раз.

Код
        zamena = (string.gsub(data, "<", "<"))
        zamena = (string.gsub(data, ">", ">"))
        AddMessage("<font face=MS Sans Serif>["..nowdate.."] "..nick1.." "..zamena.."</font></i></br>")




В данном примере работает строка с >. Помогите и объясните плиз!!!
Ещё пробовал делать так
Код
zamena = (string.gsub(data, "<", "<")) and (string.gsub(data, ">", ">"))
Go to the top of the page
+Quote Post
alex82
сообщение 20.9.2010, 20:08
Сообщение #2


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1381 раз




Наверное, в качестве аргумента при втором вызове нужно указывать zamena, а не data.

А еще лучше так:
Код
       zamena = data:gsub("<", "<"):gsub( ">", ">")


Спасибо сказали:
Go to the top of the page
+Quote Post
foXDEvil
сообщение 20.9.2010, 20:46
Сообщение #3


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




Спасибо большое big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 20.9.2010, 20:54
Сообщение #4


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1703 раза




Лучше же конечно записать это выражение через одну функцию замены, дабы два раза не пробегать по строке.

Код
zamena = data:gsub("[<>]", function(k) return k == "<" and "&lt;" or "&gt;" end)
Go to the top of the page
+Quote Post
Ksan
сообщение 20.9.2010, 23:16
Сообщение #5


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 710
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 639 раз




Объясните мне, в чём смысл замены одного символа тем же самым символом?
Код
(string.gsub(data, "<", "<"))
Покажите мне хотя бы одно различие между ними.
Go to the top of the page
+Quote Post
Alexey
сообщение 21.9.2010, 5:05
Сообщение #6


7 квадратиков
*******

Группа: Модераторы
Сообщений: 791
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 291 раз




Не одним и тем-же, а его хтмль-кодом, который форум перевёл обратно в символ – посмотри скриншот из первого поста.
Go to the top of the page
+Quote Post
foXDEvil
сообщение 21.9.2010, 11:40
Сообщение #7


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




Код
gsub( "8-\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%-\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "$-\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:-\", "<img src='dckolobok/unsure.bmp.png'>")


пробовал подставлять слеш \ вроде нотепад показывает норм но хаб выдаёт ошибку(
Всё дело в смайликах у них символы проблемные >.<
Go to the top of the page
+Quote Post
Nickolya
сообщение 21.9.2010, 12:00
Сообщение #8


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 724
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 770 раз




Итак, для начала, я думаю, тебе надо прочитать Несколько Слов О Захватах И Регулярных Выражениях. Затем могу предложить такой костыль, который я как-то сделал для скрипта SmilesLimiter:
Код
tMagic = {
    ["%^"] = "%%%^",
    ["%["] = "%%%[",
    ["%)"] = "%%%)",
    ["%("] = "%%%(",
    ["%+"] = "%%%+",
    ["%*"] = "%%%*",
    ["%$"] = "%%%$",
    ["%?"] = "%%%?",
    ["%."] = "%%%.",
    ["%-"] = "%%%-",
}

function MakeNormMagicCharacters(sData)
    local sData = string.gsub(sData, "%%", "%%%%")
    for sFrom, sTo in pairs(tMagic) do
        sData = string.gsub(sData, sFrom, sTo)
    end
    return sData
end

Применение в твоем случчае:
Код
gsub( MakeNormMagicCharacters("8-\\"), "<img src='dckolobok/blush2.bmp.png'>"):gsub( MakeNormMagicCharacters("%-\\"), "<img src='dckolobok/wacko.bmp.png'>"):gsub( MakeNormMagicCharacters("$-\\"), "<img src='dckolobok/beee.bmp.png'>"):gsub( MakeNormMagicCharacters("{:-\\"), "<img src='dckolobok/unsure.bmp.png'>")


Для справки: в луа символ \ является служебным и для его нормального использования надо писать \\
Двойная кавычка экранируется как \"

Либо еще можно использовать метод отсюда, он оптимальнее.

Но лучше изучить просто какие символы экранируются и записывать вообще вот так:
Код
gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>")


Спасибо сказали:
Go to the top of the page
+Quote Post
foXDEvil
сообщение 21.9.2010, 12:04
Сообщение #9


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




Огромное спасибо big_smile.gif классный форум с классными админами big_smile.gif не заставляют долго ждать big_smile.gif)))
Go to the top of the page
+Quote Post
alex82
сообщение 21.9.2010, 12:07
Сообщение #10


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1381 раз




Nickolya

Код
tMagic = {
    ["%^"] = "%%%^",
    ["%["] = "%%%[",
    ["%)"] = "%%%)",
    ["%("] = "%%%(",
    ["%+"] = "%%%+",
    ["%*"] = "%%%*",
    ["%$"] = "%%%$",
    ["%?"] = "%%%?",
    ["%."] = "%%%.",
    ["%-"] = "%%%-",
}

function MakeNormMagicCharacters(sData)
    local sData = string.gsub(sData, "%%", "%%%%")
    for sFrom, sTo in pairs(tMagic) do
        sData = string.gsub(sData, sFrom, sTo)
    end
    return sData
end
Вся эта лабуда делается при помощи одного метода:
Код
:gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1")

Об этом я уже писал здесь.


Спасибо сказали:
Go to the top of the page
+Quote Post
foXDEvil
сообщение 21.9.2010, 12:11
Сообщение #11


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




увы но даже с функцией обработать в смайлик отказывается(((
Go to the top of the page
+Quote Post
Nickolya
сообщение 21.9.2010, 12:15
Сообщение #12


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 724
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 770 раз




alex82, я просто привел код из очень старого скрипта, для наглядности. Тебе за метод спасибо, сам теперь только им и пользуюсь, тем более я упомянул про него в своем сообщении big_smile.gif

foXDEvil, давай сюда код свой, без этого никак.
Go to the top of the page
+Quote Post
foXDEvil
сообщение 21.9.2010, 12:19
Сообщение #13


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




laughing.gif Сразу предупреждаю программист из меня ещё тот так что в скрипте вы найдёте кучу и тучу ошибок хД
(скрипт выводит последние 35 сообщений из чата в файлик)
Раскрывающийся текст
Код
LastTenMessages = {}
NumberOfMessages = 0
botname = "R[Bot]"
logfile= "/home/madnesss/hosts/toa/verlilog/35.html?#34;
tMagic = {
    ["%^"] = "%%%^",
    ["%["] = "%%%[",
    ["%)"] = "%%%)",
    ["%("] = "%%%(",
    ["%+"] = "%%%+",
    ["%*"] = "%%%*",
    ["%$"] = "%%%$",
    ["%?"] = "%%%?",
    ["%."] = "%%%.",
    ["%-"] = "%%%-",
}

function MakeNormMagicCharacters(sData)
    local sData = string.gsub(sData, "%%", "%%%%")
    for sFrom, sTo in pairs(tMagic) do
        sData = string.gsub(sData, sFrom, sTo)
    end
    return sData
end

function VH_OnParsedMsgChat(nick, data)
    if (string.find(data, "^[%.%+!]")) then
    else
        nick1 = "<<b>"..nick.."</b>>"
        nick2 = "<b>*"..nick.."</b>"
        nowdate = os.date("%X")
        zamena = data:gsub("<", "<"):gsub( ">", ">"):gsub( "/me", ""):gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>")
        if (string.find(data, "/me")) then
        AddMessage("<font face=MS Sans Serif>["..nowdate.."] "..nick2.." "..zamena.." </font></i></br>")
        else
        AddMessage("<font face=MS Sans Serif>["..nowdate.."] "..nick1.." "..zamena.." </font></i></br>")
        end
    end
handle =  io.open(logfile,"w+")
io.output(handle)
if (handle) then
date =  os.date ("*t")
io.write("<link rel='stylesheet' href='/templates/system/css/system.css' type='text/css' /><link rel='stylesheet' href='/templates/siteground-j15-154/css/template.css' type='text/css' /><style type'text/css'>body {font-family: Tahoma, Verdana, Arial, sans-serif; line-height: 1.3em;    margin: 0;    padding: 0;    font-size: 11px; color: #424242;    background: #efeeee;}</style>")
io.write(string.format("")..GetMessages())
io.flush()
end
    return 1
end

function AddMessage(message)
    if (NumberOfMessages == 0) then
        LastTenMessages[1] = message
        NumberOfMessages = 1
    elseif (NumberOfMessages < 35) then
        NumberOfMessages = NumberOfMessages + 1
        LastTenMessages[NumberOfMessages] = message
    elseif (NumberOfMessages == 35) then
         for i = 1, 34, 1 do
            LastTenMessages[i] = LastTenMessages[i+1]
        end
        LastTenMessages[35] = message
    end
end

function GetMessages()
    if (NumberOfMessages == 0) then
        return ""
    else
        TempString = ""
        for i = 1, NumberOfMessages, 1 do
            TempString = TempString.."   "..LastTenMessages[i]
        end
        return TempString
    end
end

переделал из истории на верлике big_smile.gif
Прикрепленные файлы
Прикрепленный файл  35web.lua ( 2.36 килобайт ) Кол-во скачиваний: 3
 
Go to the top of the page
+Quote Post
alex82
сообщение 21.9.2010, 12:24
Сообщение #14


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1381 раз




Функция обработки смайлов из StatPX:
Код
tSmiles = {
    ["biggrin.gif"] = {":D", ":-D", ":=D"},
    ["blink.gif"] = {"oO", "o.O", "o_O", "оО", "о.О", "о_О"},
    ["confused.gif"] = {":S", ":-S", ":=S", ":confused:"},
    ["cry.gif"] = {":'(", ":'-(", ":'=(", ":cry:"},
    ["lol.gif"] = {":lol:", ":LOL:", "LOL"},
    ["sad.gif"] = {":(", ":-(", ":=("},
    ["shock.gif"] = {"O.O", "O_O", "О.О", "О_О", ":shock:"},
    ["smiley.gif"] = {":)", ":-)", ":=)"},
    ["tongue.gif"] = {":P", ":-P", ":=P"},
    ["wink.gif"] = {";)", ";-)", ";=)"},
    ["woohoo.gif"] = {"8-D", "8=D", ":woohoo:"},
}

function string.Smiles(str)
    for i,v in pairs(tSmiles) do
        local rep = "<img src=\"smiles/"..i.."\" border=\"0\" alt=\"%1\" />"
        for _,smile in ipairs(v) do
            str = str:gsub(smile:gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1"),rep)
        end
    end
    return str
end

Используется так:
Код
src=src:Smiles()


PS. Изобретать велосипед - на редкость неблагодарное занятие.


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 21.9.2010, 12:32
Сообщение #15


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 724
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 770 раз




Ввиду некой тупости верли (с которой как-то пришлось встретиться) предлагаю вместо
Код
        zamena = data:gsub("<", "<"):gsub( ">", ">"):gsub( "/me", ""):gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>")

попробовать вот такой код:
Цитата
local zamena = data
zamena = string.gsub(zamena, "<", "&*#60;")
zamena = string.gsub(zamena, ">", "&*#62;")
zamena = string.gsub(zamena, "/me", "")
zamena = string.gsub(zamena, "8%-\\", "<img src='dckolobok/blush2.bmp.png'>")
zamena = string.gsub(zamena, "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>")
zamena = string.gsub(zamena, "%$%-\\", "<img src='dckolobok/beee.bmp.png'>")
zamena = string.gsub(zamena, "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>")

* надо удалить!
Go to the top of the page
+Quote Post
foXDEvil
сообщение 21.9.2010, 12:45
Сообщение #16


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




Цитата(Nickolya @ 21.9.2010, 14:32) *
Ввиду некой тупости верли (с которой как-то пришлось встретиться) предлагаю вместо
Код
        zamena = data:gsub("<", "<"):gsub( ">", ">"):gsub( "/me", ""):gsub( "8%-\\", "<img src='dckolobok/blush2.bmp.png'>"):gsub( "%%%-\\", "<img src='dckolobok/wacko.bmp.png'>"):gsub( "%$%-\\", "<img src='dckolobok/beee.bmp.png'>"):gsub( "{:%-\\", "<img src='dckolobok/unsure.bmp.png'>")

попробовать вот такой код:

* надо удалить!


всё отлично работает big_smile.gif кроме zamena = string.gsub(zamena, "%$%-\\", "<img src='dckolobok/beee.bmp.png'>") не видит его big_smile.gif думаю сам утрясу !!!
Всем спасибо за потраченное время!! big_smile.gif
Go to the top of the page
+Quote Post
Nickolya
сообщение 21.9.2010, 13:23
Сообщение #17


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 724
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 770 раз




А попробуй после
Код
        local zamena = data
Дописать
Цитата
zamena = string.gsub(zamena, "&*#36;", "$")
zamena = string.gsub(zamena, "&*#124;", "|")

*, как и обычно, надо удалить!
Go to the top of the page
+Quote Post
foXDEvil
сообщение 21.9.2010, 13:32
Сообщение #18


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




именно этого мне не хватало big_smile.gif как обидно что мне мозгов не хватает ((((
Go to the top of the page
+Quote Post
foXDEvil
сообщение 4.10.2010, 11:03
Сообщение #19


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 13.1.2010
Пользователь №: 5 672
Спасибо сказали: 0 раз




Не хотел флудить создавая новую тему big_smile.gif Мне интересно можно ли через меню хаба открыть веб ссылку? Не важно птоха или верлик. Т.е. заходишь на хаб в меню нажимаешь Регистраия и тебя кидает на сайт с формой для регистрации big_smile.gif Если такое возможно киньте код big_smile.gif Заранее спасибо!
Go to the top of the page
+Quote Post
Saymon21
сообщение 4.10.2010, 11:05
Сообщение #20


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 478 раз




нет
Go to the top of the page
+Quote Post

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

 



RSS Сейчас: 25.2.2018, 3:03