2

バックスラッシュが 1 つと 2 つある文字列を区別する必要があります。Perl はそれらを同等に扱います:

print "\n" . '\qqq\www\eee\rrr';
print "\n" . '\\qqq\www\eee\rrr';

同じ結果が得られます:

\qqq\www\eee\rrr
\qqq\www\eee\rrr

さらに、次の呼び出し:

print "\n" . leadingBackSlash('\qqq\www\eee\rrr');
print "\n" . leadingBackSlash('\\qqq\www\eee\rrr');
print "\n" . leadingBackSlash('\\\qqq\www\eee\rrr');
print "\n" . leadingBackSlash('\\\\qqq\www\eee\rrr');

機能する:

sub leadingBackSlash {
    $_ = shift;
    print "\n$_";
    print "\n" . length($_);

    if( m/^\\\\/) {
        print "\ndouble backslash is matched";
    }

    if( m/^\\/) {
        print "\nsingle backslash is matched";
    }
}

結果が生成されます:

\qqq\www\eee\rrr
16
single backslash is matched

\qqq\www\eee\rrr
16
single backslash is matched

\\qqq\www\eee\rrr
17
double backslash is matched
single backslash is matched

\\qqq\www\eee\rrr
17
double backslash is matched
single backslash is matched

つまり、2 つのバックスラッシュが 1 つのバックスラッシュに一致します。

単一のバックスラッシュではなく二重のバックスラッシュに一致する正規表現を教えてください。

4

2 に答える 2

0
#!usr/bin/perl -w
use strict;

#Give the STDIN from the commandline and you will get the exact output

chomp (my $string = <STDIN>) ; # Input: \\\arun
print "\$string: ".$string,"\n";
if($string =~m/^(\\.*?)[a-z]+/i){print "Matched backslash ".length ($1)."
times in the string ".$string."\n";}

my $string2 = '\\\arun';
print "\$string2: ".$string2,"\n";


=h
output:

Inputgiven:\\\arun
$string: \\\arun
Matched backslash 3 times in the string \\\arun
$string2: \\arun
于 2013-07-25T00:22:18.280 に答える