Multiple substitutions with a single regular expression in perl

后端 未结 3 1064
心在旅途
心在旅途 2021-01-24 01:44

Say I have the following in perl:

my $string;
$string =~ s/ /\\\\ /g;
$string =~ s/\'/\\\\\'/g;
$string =~ s/`/\\\\`/g;

Can the above substitut

相关标签:
3条回答
  • 2021-01-24 02:10

    Although it's arguably easier to read the way you have it now, you can perform these substitutions at once by using a loop, or combining them in one expression:

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

    By the way, you can make your substitutions a little easier to read by avoiding "leaning toothpick syndrome", as the various regex operators allow you to use a variety of delimiters:

    $string =~ s{ }{\\ }g;
    $string =~ s{'}{\\'}g;
    $string =~ s{`}{\\`}g;
    
    0 讨论(0)
  • 2021-01-24 02:19

    Separate substitutions may be much more efficient than a single complex one (e.g. when working with fixed substrings). In such cases you can make the code shorter, like this:

    my $string;    
    for ($string) {
        s/ /\\ /g;
        s/'/\\'/g;
        s/`/\\`/g;
    }
    
    0 讨论(0)
  • 2021-01-24 02:31
    $string =~ s/([ '`])/\\$1/g;
    

    Uses a character class [ '`] to match one of space, ' or ` and uses brackets () to remember the matched character. $1 is then used to include the remembered character in the replacement.

    0 讨论(0)
提交回复
热议问题