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

neo*_*o33 0 perl

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

   $string1="ZZ:DPHTEST1ZZ";
Run Code Online (Sandbox Code Playgroud)

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

print $fragment1;
print $fragment2;  
Run Code Online (Sandbox Code Playgroud)

获得以下输出:

ZZ
DPHTEST1ZZ
Run Code Online (Sandbox Code Playgroud)

我尝试过:

$fragment1 =  substr $string1, index($string1, ':');
print $fragment1;
Run Code Online (Sandbox Code Playgroud)

但我得到了:

:DPHTEST1ZZ
Run Code Online (Sandbox Code Playgroud)

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

sim*_*que 5

index内建返回字符串中的字符串的第一个位置.对于你的例子,index($string1, ':')是2.如果你想substr:刚刚添加一个之后开始,那么你得到三个.

my $fragment2 =  substr $string1, index($string1, ':') + 1;
Run Code Online (Sandbox Code Playgroud)

要获取左侧的内容:,您需要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;
Run Code Online (Sandbox Code Playgroud)

上述方法在SQL 1或其他不包含的语言中很有用split.然而,Perl并包括split,所以my ($fragment1, $fragment2) = split /:/, $string1用骆驼先生建议是更明智的选择.它更具可读性.


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