有一个大字符串s
,其中包含以逗号分隔的商品代码。
例如:
$s="90320,328923,SKJS32767,DSIKUDIU,829EUE,AUSIUD0Q897,AJIUE98,
387493420DA,93RE,AKDJ93,SADI983,90439,JADKJ84";
在我的应用程序中,这些字符串被传递给一个函数,该函数返回这些商品的价格,即该函数的输出是输入商品代码的相应价格。
但是,由于某些限制,的最大长度$s
不应超过16。如果长度$s
超过16,则将引发异常。因此,应将这些字符串划分为一个数组,以使数组中每个元素的长度小于或等于16。
例如:分区后$s
,数组为:
$Arr[0]='90320,328923',#Note First 16 char is 0320,328923,SK.
However, SK is neglected as its an incomplete(being partial) item code.
$Arr[1]='SKJS32767',
$Arr[2]='DSIKUDIU,829EUE',
$Arr[3]='AUSIUD0Q897',
$Arr[4]='AJIUE98',
$Arr[5]='387493420DA,93RE'
对于给定的$s
,函数应遵循上述约束返回一个数组。
我的方法是使用该substr
函数,并从更新的位置索引中提取最多16个偏移量的字符串。可以用更好的方法吗?
使用全局/g
正则表达式匹配,这非常简单。
该程序演示。regex模式查找尽可能多的字符,最多十六个字符,后跟逗号或字符串结尾。
但是,我的第一个想法与RobEarl
的注释相同-为什么不只将字符串中的一个字段放入数组的每个元素中?是否真的有可能仅仅因为可能就将多个元素包装在一起?
use strict;
use warnings;
use 5.010;
my $s = '90320,328923,SKJS32767,DSIKUDIU,829EUE,AUSIUD0Q897,AJIUE98,387493420DA,93RE,AKDJ93,SADI983,90439,JADKJ84';
my @partitions;
while ( $s =~ /\G(.{0,16})(?:,|\z)/g ) {
push @partitions, $1;
}
say for @partitions;
输出
90320,328923
SKJS32767
DSIKUDIU,829EUE
AUSIUD0Q897
AJIUE98
387493420DA,93RE
AKDJ93,SADI983
90439,JADKJ84
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句