Здравствуйте! Только начал изучать lua по книге Роберто Иерусалимского и у него сразу пошло, без обьяснения, использование неких последовательностей символов в таблицах вроде %q+ или %w+ или %a+ или все тоже самое но без плюса, растолкуйте мне пожалуйста что они значат и что дает добавление знака плюс?
Пользователь
Сообщений: Регистрация: 30.01.2015
09.10.2018 22:15:52
1 или больше повторения токена. В отличие от %а* где количество токенов может быть равно 0
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
10.10.2018 05:48:13
Цитата
Анатолий написал: растолкуйте мне пожалуйста что они значат и что дает добавление знака плюс
Добрый день. Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua , на русском так же статей много.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Nikolay Pavlov написал: Добрый день.Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua , на русском так же статей много.
Может вы будете так добры что подскажет дальше, вообщем читаю про паттерны, многое стало ясно но опять наткнулся на место где без обьяснения что это применяется некоторая вещь, а именно, в
[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 который в данном случае означает первую захваченную кавычку, но в нигде небыло сказано о паттернах вида %цифра, и еще я не совсем понял что там означает прямой слэш в [\"'], т.к. в паттернах применяются везде только обратные слэши - /, надо понимать что он ничего не значит а в квадратных скобках просто указываются все символы один из которых должен быть в строке к которой применяется шаблон, то есть либо \ либо " либо ', ну а как же тогда истолковывается %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!
написал: Добрый день.Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua , на русском так же статей много.
Может вы будете так добры что подскажет дальше, вообщем читаю про паттерны, многое стало ясно но опять наткнулся на место где без обьяснения что это применяется некоторая вещь, а именно, в
Цитата
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 который в данном случае означает первую захваченную кавычку, но в нигде небыло сказано о паттернах вида %цифра, и еще я не совсем понял что там означает прямой слэш в [\"'], т.к. в паттернах применяются везде только обратные слэши - /, надо понимать что он ничего не значит а в квадратных скобках просто указываются все символы один из которых должен быть в строке к которой применяется шаблон, то есть либо \ либо " либо ', ну а как же тогда истолковывается %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!
что тут означают %2 и %1? Что значат все эти %0, %1, %2, %3 и т.д.?
Удалите, разобрался
Пользователь
Сообщений: Регистрация: 09.10.2018
15.10.2018 21:22:28
Разобрался но не до конца, читаю у Иерусалимчего о паттернах дальше, на , там такой пример: 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.
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
18.10.2018 08:47:29
Цитата
Анатолий написал: Что значат эти два прямых слэша в s = string.gsub(s, "\\(%a+){(.-)}", " %2 ") - "\\(%a+){(.-)}"?
Добрый день. При работе с регулярными выражениями, если нужно использовать какой-либо зарезервированный символы как обычные, то их нужно экранировать, прямой слэш является символом экранирования. Погуглите на тему "экранирование спецсимволов в lua".
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf'
Пользователь
Сообщений: Регистрация: 09.10.2018
19.10.2018 13:57:08
Хорошо спасибо, еще вопрос, дальше в встречаю набор с 3мя %, как это можно понять?
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
Пользователь
Сообщений: Регистрация: 09.02.2015
QUIK software testing
22.10.2018 10:53:40
Цитата
Анатолий написал: "%%%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'