gpt4 book ai didi

regex - Perl 正则表达式问题!

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:15 25 4
gpt4 key购买 nike

我正在从文件中读取一个字符串:

2343,0,1,0 ... 500 times ...3

上面是从文件中读取$_ 的例子。它是任何数字,后跟 500 个逗号分隔的 0/1,然后是数字 3。

while(<FILE>){
my $string = $_;
chomp($string);
my $a = chop($string);
my $found;
if($string=~m/^[0-9]*\,((0,|1,){$i})/){
$found = $&.$a;
print OTH $found,"\n";
}
}

我正在使用 chop 从字符串末尾获取数字 3。然后匹配第一个数字,后跟 $i 出现的 0 或 1。我遇到的问题是 chop 出于某种原因无法处理字符串。在 if 语句中,当我尝试连接匹配项和切碎的数字时,我返回的所有内容都是 $& 的内容。

我也尝试过使用 my $a = substr $a,-1,1; 来获取数字 3,但这也没有用。

奇怪的是,这段代码可以在 Windows 上的 Eclipse 中运行,而当我将它放到 Linux 服务器上时,它就无法运行了。谁能发现我犯的愚蠢错误?

最佳答案

通常,我总是倾向于在我的数据中允许不可见的空白。我发现它使我的代码更加健壮,期望有人没有在行或字符串的末尾看到额外的空格(如写入日志)。所以我认为这可以解决您的问题:

my ( $a ) = $string =~ /(\S)\s*$/;

当然,既然您知道您正在寻找一个数字,那么最好更精确一些:

my ( $a ) = $string =~ /(\d+)\s*$/;

关于regex - Perl 正则表达式问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5420630/

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