Lua标点符号字符串模式中包含哪些字符(%p)?

use*_*563 8 lua punctuation lua-patterns

我无法找到哪些字符复合了"%p"Lua中设置的标点符号的文档.

Ded*_*tor 9

答案是依赖于语言环境,它是C函数的直接接口.
实际上,如果有一个类似于Lua函数的C标准函数,那么几乎可以肯定Lua函数只包含C函数,疣和所有函数,即使没有查看具体情况.
(这是部分原因file:read()仍然是在5.2中读取带有嵌入零的文本的麻烦,甚至可能在5.3中有)

虽然Amaden为"C"语言环境提供了一个很好的答案,而ColonelThirtyTwo提供了检查当前语言环境的正确方法,但C标准只说:

ispunct():ispunct函数测试任何打印字符,该打印字符是特定于语言环境的标点符号集之一,其中isspace和isalnum都不为true.在"C"语言环境中,ispunct对于isspace和isalnum都不为true的每个打印字符都返回true


Ama*_*dan 7

%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 ‘‘~’’
Run Code Online (Sandbox Code Playgroud)

(来自man ispunct)


Col*_*Two 6

一个小脚本来找到它们:

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
-- !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Run Code Online (Sandbox Code Playgroud)