Какие символы включены в шаблон строки препинания Lua (%p)?
Я не смог найти документацию о том, какие символы составляют набор знаков препинания "%p"
в Луа.
3 ответа
Ответ зависит от локали, это прямой интерфейс к функции C.
На самом деле, если есть стандартная функция C, которая делает что-то похожее на функцию Lua, то почти наверняка функция Lua просто оборачивает функцию C, бородавки и все такое, даже не смотря на конкретный случай.
(Это часть причины file:read()
все еще есть проблемы с чтением текста со встроенными нулями в 5.2, может быть, даже будет в 5.3)
В то время как Amaden дал хороший ответ для локали "C", а ColonelThirtyTwo дал правильный способ проверить текущую локаль, стандарт C говорит только:
ispunct()
: Функция ispunct проверяет любой печатный символ, являющийся одним из набора знаков препинания, специфичного для данной локали, для которого ни isspace, ни isalnum не имеют значения true. В локали "C" ispunct возвращает true для каждого печатаемого символа, для которого ни isspace, ни isalnum не являются true
Небольшой скрипт для их поиска:
for i=0,255 do
if string.match(string.char(i), "%p") then
io.write(string.char(i))
end
end
io.write("\n")
-- $ luajit test.lua
-- !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
%p
соответствует функции C ispunct
( Источник C v 5.2), что соответствует следующему:
041 ‘‘!’’ 042 ‘‘ ’’ 043 ‘‘#’’ 044 ‘‘$’’ 045 ‘‘%’’
046 ‘‘&’’ 047 ‘‘’’’ 050 ‘‘(’’ 051 ‘‘)’’ 052 ‘‘*’’
053 ‘‘+’’ 054 ‘‘,’’ 055 ‘‘-’’ 056 ‘‘.’’ 057 ‘‘/’’
072 ‘‘:’’ 073 ‘‘;’’ 074 ‘‘<’’ 075 ‘‘=’’ 076 ‘‘>’’
077 ‘‘?’’ 100 ‘‘@’’ 133 ‘‘[’’ 134 ‘‘\’’ 135 ‘‘]’’
136 ‘‘^’’ 137 ‘‘_’’ 140 ‘‘‘’’ 173 ‘‘{’’ 174 ‘‘|’’
175 ‘‘}’’ 176 ‘‘~’’
(От man ispunct
)