Значение символов из таблиц вроде %q+

Страницы: 1
RSS
Значение символов из таблиц вроде %q+
 
Здравствуйте! Только начал изучать lua по книге Роберто  Иерусалимского и у него сразу пошло, без обьяснения, использование неких последовательностей символов в таблицах вроде %q+ или %w+ или %a+ или все тоже самое но без плюса, растолкуйте мне пожалуйста что они значат и что дает добавление знака плюс?
 
1 или больше повторения токена. В отличие от %а*   где количество токенов может быть равно 0
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Анатолий написал:
растолкуйте мне пожалуйста что они значат и что дает добавление знака плюс
Добрый день.
Поищите в интернете статьи об использовании паттернов или регулярных выражений в Lua, это достаточно мощный и интересный функционал, вот для примера официальное описание для Lua https://www.lua.org/pil/20.2.html, на русском так же статей много.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Nikolay Pavlov написал:
https://www.lua.org/pil/20.2.html
Вот тут все стало ясно и понятно
 
Цитата
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:

   s = [[then he said: "it's all right"!]]
   a, b, c, quotedPart = string.find(s, "([\"'])(.-)%1")
   print(quotedPart)   --> it's all right
   print©            --> "
[/QUOTE]

Тут в паттерне "([\"'])(.-)%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!

обе программы, и с %0 и с %1 работают одинаково

print(string.gsub("hello Lua", "(.)(.)", "%2%1"))
     -->  ehll ouLa

что тут означают %2 и %1?
Что значат все эти %0, %1, %2, %3 и т.д.?
 
Цитата
Анатолий написал:
Цитата
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:

   s = [[then he said: "it's all right"!]]
   a, b, c, quotedPart = string.find(s, "([\"'])(.-)%1")
   print(quotedPart)   --> it's all right
   print©            --> "

Тут в паттерне "([\"'])(.-)%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!

обе программы, и с %0 и с %1 работают одинаково

print(string.gsub("hello Lua", "(.)(.)", "%2%1"))
     -->  ehll ouLa

что тут означают %2 и %1?
Что значат все эти %0, %1, %2, %3 и т.д.?
Удалите, разобрался
 
Разобрался но не до конца, читаю у Иерусалимчего о паттернах дальше, на 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
 
Хорошо спасибо, еще вопрос, дальше в https://www.lua.org/pil/20.3.html встречаю набор с 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 `+´:

function escape (s)
s = string.gsub(s, "([&=+%c])", function ©

                                       return string.format ("%%%02X", string.byte©)

                               end)
        s = string.gsub(s, " ", "+")
        return s

end


"%%%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
Страницы: 1
Читают тему
Наверх