2010-06-29 8 views

Répondre

9
$string =~ s/([ '`])/\\$1/g; 

Utilise un character class[ '`] pour correspondre à l'un de l'espace, 'ou `et utilise les supports () de se rappeler le caractère correspondant. $1 est ensuite utilisé pour inclure le caractère mémorisé dans le remplacement.

+0

+1: Brillant, exactement ce que je cherchais. –

4

Des substitutions séparées peuvent être beaucoup plus efficaces qu'un seul complexe (par exemple lorsqu'on travaille avec des sous-chaînes fixes). Dans ce cas, vous pouvez rendre le code plus court, comme celui-ci:

my $string;  
for ($string) { 
    s/ /\\ /g; 
    s/'/\\'/g; 
    s/`/\\`/g; 
} 
+0

+1: Merci pour cette syntaxe de mentionner –

+1

Ou '$ string = ~ s/($ _)/\\ $ 1/g pour (q//, q/'/, q/\' /); ' – Zaid

2

Bien qu'il soit sans doute plus facile de lire la façon dont vous l'avez maintenant, vous pouvez effectuer ces substitutions à la fois en utilisant une boucle, ou en les combinant dans un expression:

# loop 
$string =~ s/$_/\\$_/g foreach (' ', "'", '`'); 

# combined 
$string =~ s/([ '`])/\\$1/g; 

par ailleurs, vous pouvez faire vos substitutions un peu plus facile à lire en évitant « penchant syndrome cure-dent », comme les différents opérateurs regex vous permettent d'utiliser une variété de délimiteurs:

$string =~ s{ }{\\ }g; 
$string =~ s{'}{\\'}g; 
$string =~ s{`}{\\`}g; 
Questions connexes