Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何匹配单引号字符串中的双反斜杠?_Regex_Perl - Fatal编程技术网

Regex 如何匹配单引号字符串中的双反斜杠?

Regex 如何匹配单引号字符串中的双反斜杠?,regex,perl,Regex,Perl,我需要区分带有单反斜杠和双反斜杠的字符串。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\w

我需要区分带有单反斜杠和双反斜杠的字符串。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
i、 它将双反斜杠与单反斜杠匹配


你能帮我用regexp匹配双反斜杠而不是单反斜杠吗

在Perl中,单引号字符串只有两个反斜杠转义:

分隔符,例如“约翰的车”。 反斜杠。当我们想要一个尾随的反斜杠:“foo\bar\\”时,这是必需的 所有其他反斜杠都是文字。不幸的结果是,对于n个实际反斜杠,必须在单引号字符串文字中使用2n-1或2n反斜杠

正则表达式与双引号字符串具有相同的反斜杠语义

您已经有一个与前导双反斜杠匹配的正则表达式:/^\\\\/。这显然与一个前导反斜杠不匹配


如果要匹配单个反斜杠,并且只匹配单个反斜杠,请确保第一个反斜杠后面没有另一个反斜杠。这使用了一个负前瞻:/^\\?!\\\/

在Perl中,单引号字符串只有两个反斜杠转义:

分隔符,例如“约翰的车”。 反斜杠。当我们想要一个尾随的反斜杠:“foo\bar\\”时,这是必需的 所有其他反斜杠都是文字。不幸的结果是,对于n个实际反斜杠,必须在单引号字符串文字中使用2n-1或2n反斜杠

正则表达式与双引号字符串具有相同的反斜杠语义

您已经有一个与前导双反斜杠匹配的正则表达式:/^\\\\/。这显然与一个前导反斜杠不匹配


如果要匹配单个反斜杠,并且只匹配单个反斜杠,请确保第一个反斜杠后面没有另一个反斜杠。这使用了一个负前瞻:/^\\?!\\\/

您可能希望编辑您的答案,以解释您正在做什么,以及为什么要这样做。还请注意,坦率地说,你的正则表达式是胡说八道。您可能是指/^\\*/。例如,对于您的正则表达式,如果我有文字输入\\:foobar,那么$1捕获将等于\\\\:,长度为4。您不希望量化,。但\\。而且,/…[a-z]+/i是荒谬的。您不是指\w+?您可能希望编辑您的答案,以解释您正在做什么,以及为什么要这样做。还请注意,坦率地说,你的正则表达式是胡说八道。您可能是指/^\\*/。例如,对于您的正则表达式,如果我有文字输入\\:foobar,那么$1捕获将等于\\\\:,长度为4。您不希望量化,。但\\。而且,/…[a-z]+/i是荒谬的。你不是说\w+?herdocs的单引号变量计数不同:n个反斜杠总是n个反斜杠。这可以让你完全摆脱恼人的逃避。示例打印heredocs的单引号变体计数不同:n个反斜杠始终是n个反斜杠。这可以让你完全摆脱恼人的逃避。示例打印尝试:/^\\?:[^\\]|$/谢谢!消极前瞻是我问题的答案。请尝试:/^\\?:[^\\]|$/谢谢!消极前瞻是我问题的答案。
#!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