Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用perl获取以下子字符串?_Perl - Fatal编程技术网

如何使用perl获取以下子字符串?

如何使用perl获取以下子字符串?,perl,Perl,您好,我正在使用perl脚本,我有以下变量: $string1="ZZ:DPHTEST1ZZ"; 我想通过使用:作为分隔符从$string1获取一个子字符串来构建两个附加变量,我想在脚本中添加两个打印,输出如下: print $fragment1; print $fragment2; 要获得以下输出: ZZ DPHTEST1ZZ 我试过: $fragment1 = substr $string1, index($string1, ':'); print $fragment1;

您好,我正在使用perl脚本,我有以下变量:

   $string1="ZZ:DPHTEST1ZZ";
我想通过使用:作为分隔符从$string1获取一个子字符串来构建两个附加变量,我想在脚本中添加两个打印,输出如下:

print $fragment1;
print $fragment2;  
要获得以下输出:

ZZ
DPHTEST1ZZ
我试过:

$fragment1 =  substr $string1, index($string1, ':');
print $fragment1;
但我得到了:

:DPHTEST1ZZ
因此,我希望通过使用分隔符来获取这个字符串,我进行了一些研究,我刚刚找到了使用位置的perl方法,感谢支持,

返回字符串中字符串的第一个位置。例如,索引$string1,':'是2。如果你想让substr在后面开始:只需添加一个,就可以得到三个

my $fragment2 =  substr $string1, index($string1, ':') + 1;
要获取:,需要将substr从字符串的开头取到第一次出现的:

上述方法对于1或其他不包括的语言非常有用。但是,Perl确实包含split,因此我的$fragment1、$fragment2=split/:/,$string1 as是更合理的选项。更具可读性


我在这里链接了一个MySQL文档。请注意,没有拆分,底部的某个地方有一条注释,说明没有包含如何执行substr/索引的函数。

您可以尝试以下操作

my @splitted = $string1 =~ /([A-Z0-9]*):([A-Z0-9]*)/g;
print "@splitted";
或者,如果您想更具体地说明这一点,您将匹配ZZ:DPHTEST1ZZ,但不会匹配ZZX:DPHTEST1ZZ:

my @splitted = $string1 =~ /([A-Z0-9]{2}):([A-Z0-9]*)/g;

为什么不使用split呢$fragment1,$fragment2=split/:/,$string1,2@Llama先生,非常感谢你的建议,我不知道这种方法是可用的,如果你发布完整的答案,那么我将接受它,我唯一的条件是将我最初的拆分分为两部分,问题似乎更多的是你没有花时间学习Perl语言。您似乎没有遇到特定的问题,这里没有什么是快速浏览Perl基础知识无法解决的。@非常感谢,这非常有用,但是我如何获得第一部分,因为我希望这两部分在不同的变量中,感谢您的支持。@neo33我更新了答案以包含解释。非常感谢您的支持,Perl有点奇怪。@neo您为什么认为它奇怪?这里没有什么奇怪的。很多编程语言都有这些内置功能。非常感谢您的建议和有用的信息,我将通读所有内容,感谢您的支持,在进行匹配时,有时最好使用反向字符集:/^[^::+:*/
my @splitted = $string1 =~ /([A-Z0-9]{2}):([A-Z0-9]*)/g;