Здравствуйте! Только начал изучать lua по книге Роберто Иерусалимского и у него сразу пошло, без обьяснения, использование неких последовательностей символов в таблицах вроде %q+ или %w+ или %a+ или все тоже самое но без плюса, растолкуйте мне пожалуйста что они значат и что дает добавление знака плюс?
Анатолий написал: растолкуйте мне пожалуйста что они значат и что дает добавление знака плюс
Добрый день. Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua https://www.lua.org/pil/20.2.html, на русском так же статей много.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
Nikolay Pavlov написал: Добрый день.Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua https://www.lua.org/pil/20.2.html , на русском так же статей много.
Может вы будете так добры что подскажет дальше, вообщем читаю про паттерны, многое стало ясно но опять наткнулся на место где без обьяснения что это применяется некоторая вещь, а именно, в https://www.lua.org/pil/20.3.html
[QUOTE]We can also use captures in the pattern itself. In a pattern, an item like '%d', where d is a single digit, matches only a copy of the d-th capture. As a typical use, suppose you want to find, inside a string, a substring enclosed between single or double quotes. You could try a pattern such as '["'].-["']', that is, a quote followed by anything followed by another quote; but you would have problems with strings like "it's all right". To solve that problem, you can capture the first quote and use it to specify the second one:
Тут в паттерне "([\"'])(.-)%1" используется такой шаблон как %1 который в данном случае означает первую захваченную кавычку, но в https://www.lua.org/pil/20.2.html нигде небыло сказано о паттернах вида %цифра, и еще я не совсем понял что там означает прямой слэш в [\"'], т.к. в паттернах применяются везде только обратные слэши - /, надо понимать что он ничего не значит а в квадратных скобках просто указываются все символы один из которых должен быть в строке к которой применяется шаблон, то есть либо \ либо " либо ', ну а как же тогда истолковывается %1? и дальше там идут такие же примеры: print(string.gsub("hello Lua!", "(%a)", "%1-%1")) --> h-he-el-ll-lo-o L-Lu-ua-a!
В книге же у него этот пример приводится с %0: print((string.gsub("hello Lua!", "%a", "%0-%0"))) --> h-he-el-ll-lo-o L-Lu-ua-a!
Nikolay Pavlov написал: Добрый день.Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua https://www.lua.org/pil/20.2.html , на русском так же статей много.
Может вы будете так добры что подскажет дальше, вообщем читаю про паттерны, многое стало ясно но опять наткнулся на место где без обьяснения что это применяется некоторая вещь, а именно, в https://www.lua.org/pil/20.3.html
Цитата
We can also use captures in the pattern itself. In a pattern, an item like '%d', where d is a single digit, matches only a copy of the d-th capture. As a typical use, suppose you want to find, inside a string, a substring enclosed between single or double quotes. You could try a pattern such as '["'].-["']', that is, a quote followed by anything followed by another quote; but you would have problems with strings like "it's all right". To solve that problem, you can capture the first quote and use it to specify the second one:
Тут в паттерне "([\"'])(.-)%1" используется такой шаблон как %1 который в данном случае означает первую захваченную кавычку, но в https://www.lua.org/pil/20.2.html нигде небыло сказано о паттернах вида %цифра, и еще я не совсем понял что там означает прямой слэш в [\"'], т.к. в паттернах применяются везде только обратные слэши - /, надо понимать что он ничего не значит а в квадратных скобках просто указываются все символы один из которых должен быть в строке к которой применяется шаблон, то есть либо \ либо " либо ', ну а как же тогда истолковывается %1? и дальше там идут такие же примеры: print(string.gsub("hello Lua!", "(%a)", "%1-%1")) --> h-he-el-ll-lo-o L-Lu-ua-a!
В книге же у него этот пример приводится с %0: print((string.gsub("hello Lua!", "%a", "%0-%0"))) --> h-he-el-ll-lo-o L-Lu-ua-a!
Разобрался но не до конца, читаю у Иерусалимчего о паттернах дальше, на https://www.lua.org/pil/20.3.html, там такой пример: As a more useful example, let us write a primitive format converter, which gets a string with commands written in a LaTeX style, such as \command{some text} and changes them to a format in XML style, <command>some text</command> For this specification, the following line does the job: s = string.gsub(s, "\\(%a+){(.-)}", "<%1>%2</%1>") For instance, if s is the string the \quote{task} is to \em{change} that. that gsub call will change it to the <quote>task</quote> is to <em>change</em> that.
Что значат эти два прямых слэша в s = string.gsub(s, "\\(%a+){(.-)}", "<%1>%2</%1>") - "\\(%a+){(.-)}"? На этот раз они не в квадратных скобках, теперь у них уже другой смысл Поэкспериментировал, С двумя и более слэшами вывод print(s) выдает: the <quote>task</quote> is to <em>change</em> that.
А с одним и без вывод print(s) выдает: the \<quote>task</quote> is to \<em>change</em> that.
Анатолий написал: Что значат эти два прямых слэша в s = string.gsub(s, "\\(%a+){(.-)}", " %2 ") - "\\(%a+){(.-)}"?
Добрый день. При работе с регулярными выражениями, если нужно использовать какой-либо зарезервированный символы как обычные, то их нужно экранировать, прямой слэш является символом экранирования. Погуглите на тему "экранирование спецсимволов в lua".
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
The corresponding encoding is also easy to write. First, we write the escape function; this function encodes all special characters as a `%´ followed by the character ASCII code in hexadecimal (the format option "%02X" makes an hexadecimal number with two digits, using 0 for padding), and then changes spaces to `+´:
"%%%02X" - что тут означают аж три знака % ?, первый надо понимать экранирующий, но зачем после него еще два знака % а не один? Т.к. сказано что опцией является %02X а не %%02X
Анатолий написал: "%%%02X" - что тут означают аж три знака % ?, первый надо понимать экранирующий, но зачем после него еще два знака % а не один? Т.к. сказано что опцией является %02X а не %%02X
Добрый день. Выше на странице, на которую Вы ссылаетесь, описана для чего используется '%%'.
Цитата
By the way, because of those changes, a `%´ in the replacement string must be escaped as "%%".
Т.е. насколько я понял автора, в строке return string.format ("%%%02X", string.byte(с)) он ищет подстроки вида '%00[HEX]' и меняет их на значение передаваемое в параметре c. Т.о. первые '%%' отвечают за символ %, а '%02X' уже за HEX с двумя нулями впереди.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip