gpt4 book ai didi

regex - perl 中的 split 函数应该如何工作?

转载 作者:行者123 更新时间:2023-12-04 22:12:51 26 4
gpt4 key购买 nike

我今天在使用 split 函数时遇到了一些困难,并通读了 perlfunc
看看我是否解释错误。我试图在 '.' 上拆分一个字符串,根据 perlfunc 应该这样支持:

my $string = "hello.world";
my ($hello, $world) = split(".", $string);

或者
my $string = "hello.world";
my ($hello, $world) = split(/\./, $string);

但是,测试第一个导致空变量,因此我将测试扩展到以下内容:
#!/usr/bin/perl

use strict;
use warnings;

my $time_of_test = "13.11.19.11.45.07";
print "TOD: $time_of_test\n";
my ($year, $month, $day, $hr, $min, $sec) = split(/\./, $time_of_test);
print "Test 1 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split(".", $time_of_test);
print "Test 2 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split('.', $time_of_test);
print "Test 3 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split("\.", $time_of_test);
print "Test 4 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";
($year, $month, $day, $hr, $min, $sec) = split('\.', $time_of_test);
print "Test 5 -- Year: $year month: $month day: $day hour: $hr min: $min sec: $sec\n";

这是输出:
> ./test.pl  
TOD: 13.11.19.11.45.07
Test 1 -- Year: 13 month: 11 day: 19 hour: 11 min: 45 sec: 07
Test 2 -- Year: month: day: hour: min: sec:
Test 3 -- Year: month: day: hour: min: sec:
Test 4 -- Year: month: day: hour: min: sec:
Test 5 -- Year: 13 month: 11 day: 19 hour: 11 min: 45 sec: 07

这是否按预期工作?如果是这样,我是如何误解 perlfunc 文档的?

最佳答案

split 的第一个参数是一个正则表达式。你永远不应该在这里使用字符串(除了 " " 的特殊情况),因为它会误导实际行为。

使用 "."'.' 拆分时没有结果的原因是它将这些解释为正则表达式(拆分所有内容)。

使用 /\./'\.' 你得到了预期的结果,因为点在正则表达式中被正确地转义了。

您没有得到 "\." 的任何结果,因为它首先被双引号字符串视为转义序列,然后被 split 视为正则表达式。当它进入 split 调用时,它与 "." 相同。

关于regex - perl 中的 split 函数应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078858/

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