提问人:giordano 提问时间:9/17/2023 最后编辑:AztecCodesgiordano 更新时间:9/17/2023 访问量:57
Perl:为什么带字符的正则表达式双反斜杠不能识别带字符的单反斜杠字符串?[关闭]
Perl: Why Regex double backslash with character does not recognize string with single backslash with character? [closed]
问:
为什么这不给 1?Regex
>perl -e "$x = 'abcd\\e'; print \"$x\n\"; ($x =~ '\\e') ? print 1:print 0";
abcd\e
0
答:
1赞
AztecCodes
9/17/2023
#1
正则表达式不匹配,因为试图找到一个文字反斜杠,后跟 但是,在您的字符串中,之前有一个实际的反斜杠 要解决此问题,请在正则表达式中使用单个反斜杠,如下所示:($x =~ '\e')
'\e'
'e.'
$x ('abcd\e')
'e.'
固定正则表达式:
perl -e "$x = 'abcd\\e'; print \"$x\n\"; ($x =~ '\\\\e') ? print 1 : print 0";
通过此调整,确实会在字符串中找到反斜杠后跟,并且您的脚本将生成 的预期结果 。Regex
'e'
1
评论
0赞
giordano
9/17/2023
@AzteCodes 什么是实际的反斜杠?
0赞
AztecCodes
9/17/2023
@giordano 它不是字面上的反斜杠。它被读取为实际的反斜杠符号。
0赞
giordano
9/17/2023
然而,相当令人困惑。'abcd\\e' =~ '\\\e' 给出 1,也给出 'abcd\e' =~ '\\\e'。并且: 'abcd\e' eq 'abcd\\e' 为 true。
评论
x
perl -E '$x = q{abcd\e}; say $x; ($x =~ q{\\\e}) ? say 1 : say 0'
perl -e "\$x = 'abcd\\e'; print \"\$x\n\"; (\$x =~ '\\\\\\e') ? print 1:print 0";
q{\\\e}
q{}