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

时间:2016-11-21 14:39:23

标签: perl

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

   $string1="ZZ:DPHTEST1ZZ";

我想通过使用"来获取$ string1的子字符串来构建另外两个变量:"作为分隔符,我想在我的脚本中添加两个打印输出:

print $fragment1;
print $fragment2;  

获取以下输出:

ZZ
DPHTEST1ZZ

我尝试过:

$fragment1 =  substr $string1, index($string1, ':');
print $fragment1;

但我得到了:

:DPHTEST1ZZ

因此我想通过使用分隔符得到这个字符串,我正在研究一下,我刚刚找到使用该位置的perl方法,感谢支持,

2 个答案:

答案 0 :(得分:5)

The index builtin返回字符串中字符串的第一个位置。对于您的示例,index($string1, ':')为2.如果您希望substr:之后启动,只需添加一个,即可获得三个。

my $fragment2 =  substr $string1, index($string1, ':') + 1;

要获取:左侧的内容,您需要从字符串的开头到substr第一次出现:

use strict;
use warnings;
use feature 'say';

my $string1 = "ZZ:DPHTEST1ZZ";

my $left = substr $string1, 0, index( $string1, ':' );
my $right = substr $string1, index( $string1, ':' ) + 1;

say $left;
say $right;

上述方法非常有用in SQL 1 或其他不包含split的语言。但是,Perl确实包含split,因此my ($fragment1, $fragment2) = split /:/, $string1作为suggested by Mr. Llama是更明智的选择。它更具可读性。

1)我在这里链接了一个MySQL文档。请注意,split缺席,底部某处有评论说没有这样的功能,包括解释如何substr / index

答案 1 :(得分:2)

您可以尝试以下

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;