首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配反斜杠,后面跟着转义字符

匹配反斜杠,后面跟着转义字符
EN

Stack Overflow用户
提问于 2015-04-14 09:05:37
回答 2查看 154关注 0票数 2

我正试图匹配一个反斜杠,后面跟着一个转义字符,如tnr\。就像在JSON字符串中一样。为了简化,只考虑\t\\。例如:

代码语言:javascript
复制
use feature qw(say);
use strict;
use warnings;
use Data::Dump qw(dump);

my @data = (
    [q{\t},    qr/\\t/],            #ok
    ["\\",     qr/\\/],             #ok
    ["\\",     qr/[\\]/],           #ok
    ["\t",     qr/\t/],             #ok
    ["\t",     qr/[\t]/],           #ok
    [q{\\\t},  qr/(\\[\\\t])*/],    #not ok
    [q{\\\t},  qr/(\\\\[\\\\t])*/ ],#ok
);

for my $i (0..$#data) {
    my ($str, $regex) = @{$data[$i]};
    my $match_result = ($str =~ /^$regex$/) ? "ok" : "not ok";
    say(
        "$i : "
         . dump( $str )
         . ' =~ '
         . dump( $regex )
         . ' : '
         . $match_result
     );
}

输出:

代码语言:javascript
复制
0 : "\\t" =~ qr/\\t/ : ok
1 : "\\" =~ qr/\\/ : ok
2 : "\\" =~ qr/[\\]/ : ok
3 : "\t" =~ qr/\t/ : ok
4 : "\t" =~ qr/[\t]/ : ok
5 : "\\\\t" =~ qr/(\\[\\\t])*/ : not ok
6 : "\\\\t" =~ qr/(\\\\[\\\\t])*/ : ok

问题是,为什么测试5失败。我认为这将是对use..What的正确判断,我在这里失踪了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-14 09:36:45

第5项是

代码语言:javascript
复制
q{\\\t} =~ qr/(\\[\\\t])*/

q{\\\t},这相当于'\\\t'。在单引号字符串中,除了转义以外,不需要转义任何内容。

  • 分隔符字符
  • 紧接结束分隔符或另一个反斜杠之前的反斜杠。

此外,两个反斜杠一起出现的任何情况都被视为转义反斜杠。

因此,'\\\t'是一个包含\ \ t的三字符字符串。

qr//的内容表现为双引号上下文,因此所有反斜杠都需要转义,并可能修改以下字符。

"(\\[\\\t])*"是由( \ [ \ \t ] ) *组成的八个字符字符串,其中\t"\x09" -选项卡字符。因此,您的模式将匹配一个字符串,该字符串由反斜杠和制表符或反斜杠组成,所有这些字符串都重复了0次或更多次。字符串中只有反斜杠和t,因此不能匹配。

我希望这能帮上忙。底线是,除了保护反斜杠和分隔符之外,单引号中没有转义序列,而'\t'的意思正是反斜杠,小写字母t。

票数 3
EN

Stack Overflow用户

发布于 2015-04-14 09:22:49

原因如下:

代码语言:javascript
复制
q{\\\t}

代码语言:javascript
复制
"\\\\t" 

这是三个字符,两个反斜杠,后面跟着't‘。

正则表达式#5匹配字符对的数组数(a \后面跟着另一个\或< tabulator >)

把这个改为

代码语言:javascript
复制
[q{\\\t},  qr/(\\[\\\t]*)*/],    #not ok

还是不太好,

代码语言:javascript
复制
[q{\\\t},  qr/(\\[\\t]*)*/],    #ok

会起作用的。

乔格

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29623314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档