Какие символы включены в шаблон строки препинания 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)

Другие вопросы по тегам