你好我正在使用perl脚本,我有以下变量:
$string1="ZZ:DPHTEST1ZZ";
我想通过使用"来获取$ string1的子字符串来构建另外两个变量:"作为分隔符,我想在我的脚本中添加两个打印输出:
print $fragment1;
print $fragment2;
获取以下输出:
ZZ
DPHTEST1ZZ
我尝试过:
$fragment1 = substr $string1, index($string1, ':');
print $fragment1;
但我得到了:
:DPHTEST1ZZ
因此我想通过使用分隔符得到这个字符串,我正在研究一下,我刚刚找到使用该位置的perl方法,感谢支持,
答案 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;