gpt4 book ai didi

regex - 为什么我的正则表达式匹配版本号不起作用?

转载 作者:行者123 更新时间:2023-12-01 07:22:50 25 4
gpt4 key购买 nike

我在使用网络脚本时遇到了 perl 正则表达式匹配问题,我设法将行为放在了一个小片段中。

以 Debian 中 Perl 5.10.0 的这个 Perl 片段为例:

#!/usr/bin/perl
use warnings;
use strict;

my $line = "Version: 0\r\n";
my($version) = $line =~ m/^Version:(\s\d+)\r\n$/;
print "1st failed \n" if not $version;
($version) = $line =~ m/^Version:\s(\d+)\r\n$/;
print "2nd failed \n" if not $version;
($version) = $line =~ m/^Version:\ (\d+)\r\n$/;
print "3th failed \n" if not $version;

有了这个输出:
2nd failed
3th failed

显然,第一个和第二个之间的唯一区别是将空间移出提取的模式,理论上这根本不应该修改正则表达式,只修改返回的部分。

我不明白为什么 2nd 和 3th 不像第一个那样工作。

编辑:
如果删除 $version 中的括号不是同一个脚本,则不会得到匹配的结果,而是得到 op 的 bool 结果,要得到匹配的结果,您需要以一元形式接收它(只有一个字符串到匹配)元组。

最佳答案

问题在于您正在测试 bool 值是否为真,因为在后两种情况下,您正在提取一个错误的字符串值(字符串 '0' )。尝试这个:

$line = "Version: 0\r\n";
my $version;
($version) = $line =~ m/^Version:(\s\d+)\r\n$/;
print "1st failed \n" unless defined $version;
($version) = $line =~ m/^Version:\s(\d+)\r\n$/;
print "2nd failed \n" unless defined $version;
($version) = $line =~ m/^Version:\ (\d+)\r\n$/;
print "3th failed \n" unless defined $version;

关于regex - 为什么我的正则表达式匹配版本号不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com