我需要区分字符串与单反斜杠和双反斜杠.Perl平等对待它们:
print "\n" . '\qqq\www\eee\rrr';
print "\n" . '\\qqq\www\eee\rrr';
Run Code Online (Sandbox Code Playgroud)
会给出相同的结果:
\qqq\www\eee\rrr
\qqq\www\eee\rrr
Run Code Online (Sandbox Code Playgroud)
更多,接下来的电话:
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');
Run Code Online (Sandbox Code Playgroud)
功能:
sub leadingBackSlash {
$_ = shift;
print "\n$_";
print "\n" . length($_);
if( m/^\\\\/) {
print "\ndouble backslash is matched";
}
if( m/^\\/) {
print "\nsingle backslash is matched";
}
}
Run Code Online (Sandbox Code Playgroud)
会产生结果:
\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
Run Code Online (Sandbox Code Playgroud)
即它将双反斜杠匹配为单一反斜杠.
你能帮我用regexp来匹配双重而不是单反斜杠吗?
在Perl中,单引号字符串只有两个反斜杠转义符:
'John\'s car'.'foo\bar\\'所有其他反斜杠都是字面的.不幸的结果是,对于n个实际反斜杠,必须在单引号字符串文字中使用2n-1或2n反斜杠.
正则表达式具有与双引号字符串相同的反斜杠语义.
你已经有一个与前导双反斜杠匹配的正则表达式:/^\\\\/.这显然无法与单一的反斜杠相匹配.
如果要匹配单个反斜杠和仅一个反斜杠,只需确保第一个反斜杠后面没有另一个反斜杠.这使用负面的前瞻:/^\\(?!\\)/.
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |