Non sono stato in grado di trovare la documentazione di quali caratteri includono il set di punteggiatura "%p"
in Lua.Quali caratteri sono inclusi nel modello di stringa di punteggiatura Lua (% p)?
risposta
%p
si sposa con la funzione C ispunct
(C source v 5.2), che corrisponde al seguente:
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 ‘‘~’’
(da man ispunct
)
un piccolo script per loro trovano:
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
-- !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~
La risposta è dipendente dalla locale, è un interf diretto asso alla funzione C.
In realtà, se esiste una funzione standard C che fa qualcosa di simile alla funzione Lua, è quasi certo che la funzione Lua avvolge semplicemente la funzione C, verruche e tutto, anche senza considerare il caso specifico.
(questa è una delle ragioni per file:read()
ha ancora trouble reading text with embedded zeroes a 5.2, forse anche avranno a 5,3)
Mentre Amaden ha dato una buona risposta per il locale "C", e ColonelThirtyTwo ha dato il modo giusto per controllare per la localizzazione corrente, lo standard C dice soltanto:
ispunct()
: la prova delle funzioni ispunct per qualsiasi carattere di stampa che è uno di una serie specifica locale di caratteri di punteggiatura per i quali non isspace né isalnum è vero. Nella locale "C" , ispunct restituisce true per ogni carattere di stampa per il quale nessuno dei due è uguale a né isalnum è vero