2017-06-04 6 views
1

Je comprends que Lua n'a pas de PCRE. Comment puis-je convertir cela en Lua?Lua: Convertir PCRE en Lua

# Quote shell chars 
$a =~ s/[\002-\011\013-\032\\\#\?\`\(\)\{\}\[\]\^\*\<\=\>\~\|\; \"\!\$\&\'\202-\377]/\\$&/go; 
# quote newline as '\n'                    
$a =~ s/[\n]/'\n'/go; 

Existe-t-il un convertisseur général qui peut convertir n'importe quel PCRE en Lua?

+0

Pouvez-vous expliquer pourquoi vous en avez besoin? Notez que les motifs Lua sont échappés avec '%', pas avec '' \ ''. En outre, il s'agit d'un extrait de code Perl, ce n'est pas PCRE. –

+0

J'en ai besoin pour citer une chaîne dans VLC pour os.execute. La chaîne peut contenir n'importe quel caractère sauf \ 0 et ne doit pas être interprété par le shell. –

+0

Veuillez consulter http://ideone.com/vPyyfy. Si cela fonctionne comme prévu, s'il vous plaît laissez savoir. –

Répondre

3

Vous pouvez utiliser

local a = "\002\003\004\005\006\007\008\009\010\011\012\\\n" 
res, _ = a:gsub("([\002-\009\011-\026\\#?`(){}%[%]^*<>=~|; \"!$&'\130-\255])", "\\%1") 
res, _ = res:gsub("\n", "'\n'") 
print(res) 

Voir Lua code demo

Notez que dans les modèles Lua, \ n'est pas un caractère spécial, % est utilisé pour remplacer les caractères spéciaux (comme [) et \ddd échappe référence à la décimale , pas de codes octaux.

+0

'res: gsub (" \ n "," '\\ n' ")' devrait remplacer 'res: gsub (" \ n "," '\ n' ")' –

+0

Si le remplacement doit contenir '' \ '' suivi de 'n', alors oui. –