【发布时间】:2011-03-15 07:35:05
【问题描述】:
我有一个字符串,我需要在某个字符上进行拆分。但是,我只需要在其中一个字符上分割字符串时,它的两侧是数字。相同的字符存在于字符串的其他位置,但两侧会有一个字母——至少在一侧。我尝试如下使用拆分功能(使用“x”作为有问题的字符):
my @array = split /\dx\d/, $string;
但是,此功能会删除“x”和侧翼数字。如果可能的话,我想保留这些数字。有什么想法吗?
【问题讨论】:
我有一个字符串,我需要在某个字符上进行拆分。但是,我只需要在其中一个字符上分割字符串时,它的两侧是数字。相同的字符存在于字符串的其他位置,但两侧会有一个字母——至少在一侧。我尝试如下使用拆分功能(使用“x”作为有问题的字符):
my @array = split /\dx\d/, $string;
但是,此功能会删除“x”和侧翼数字。如果可能的话,我想保留这些数字。有什么想法吗?
【问题讨论】:
您可以先将要拆分的角色替换为独特的东西,然后再拆分该独特的东西,如下所示:
$string =~ s/(\d)x(\d)/\1foobar\2/g;
my @array = split /foobar/, $string;
【讨论】:
使用零宽度断言:
my @array = split /(?<=\d)x(?=\d)/, $string;
这将匹配前面和后面跟着一个数字的x,但不消耗数字本身。
【讨论】:
x 的实例前面不会有数字。您可以通过否定断言来实现这一点(在字符串的开头和结尾匹配 x):/(?<!\D)x(?!\D)/ 但它当然与所述问题不匹配。
"x123" 中,x 的两侧是数字,但这是一个延伸。