问题:
$val1="alecosja niewiemcosja hehehcosja lelele ojejcosja ktoscosktos coskurw";
#list context:
@myarray=$val1=~m/([eh])cos(ja|kt|ku)/g;
@myarray
将保留括号中的子串
结果print "$_\n" (foreach (@myarray))
:
e \n ja \n h \n ja
有没有办法解决这个问题:
$myarray[0][0] - first whole match,
$myarray[0][1] - first substring from first match,
$myarray[0][2] - second substring from first match
$myarray[1][0] - seonds whole match,
$myarray[1][1] - first substring from second match etc.
这是一种PHP新手的想法,但我该如何处理这些问题?
答案 0 :(得分:1)
不是直接的,但这会让你获得95%的胜利:
DB<1> $val1="alecosja niewiemcosja hehehcosja lelele ojejcosja ktoscosktos coskurw";
DB<2> @myarray=$val1=~m/(([eh])cos(ja|kt|ku))/g
DB<3> x @myarray
0 'ecosja'
1 'e'
2 'ja'
3 'hcosja'
4 'h'
5 'ja'
如果您还不知道如何操作,那么学习如何使用Perl命令行调试器将非常有用。
答案 1 :(得分:1)
如评论中所述,为什么要为自己制造困难?使用while循环将允许您直接访问每个匹配的内置变量:
use strict;
use warnings;
use Data::Dumper;
my $val = "alecosja niewiemcosja hehehcosja lelele ojejcosja ktoscosktos coskurw";
my @result;
while ($val =~ m/([eh])cos(ja|kt|ku)/g) {
push @result, [ $&, $1, $2 ]; # save matches
}
print Dumper \@result;
输出:
$VAR1 = [
[
'ecosja',
'e',
'ja'
],
[
'hcosja',
'h',
'ja'
]
];