How to escape dollar sign ($) in a string using perl regex

前端 未结 3 1404
青春惊慌失措
青春惊慌失措 2020-12-02 01:53

I\'m trying to escape several special characters in a given string using perl regex. It works fine for all characters except for the dollar sign. I tried the following:

3条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-02 02:12

    You don't need a hash if you're replacing each character with itself preceded by a backslash. Just match what you need and put a backslash in front of it:

    s/($re)/"\\$1"/eg;
    

    To build up the regular expression for all of the characters, Regexp::Assemble is really nice.

    use v5.10.1;
    use Regexp::Assemble;
    
    my $ra = Regexp::Assemble->new;
    
    my @specials = qw(_ $ { } # % & );
    
    foreach my $char ( @specials ) {
        $ra->add( "\\Q$char\\E" );
        }
    
    my $re = $ra->re;
    say "Regex is $re"; 
    
    while(  ) {
        s/($re)/"\\$1"/eg;
        print;
        }
    
    __DATA__
    There are $100 dollars
    Part #1234
    Outside { inside } Outside
    

    Notice how, in the first line of input, Regexp::Assemble has re-arranged my pattern. It's not just the glued together bits of the parts I added:

    Regex is (?^:(?:[#$%&_]|\{|\}))
    There are \$100 dollars
    Part \#1234
    Outside \{ inside \} Outside
    

    If you want to add more characters, you just put the character in @specials. Everything else happens for you.

提交回复
热议问题