[英]Regular Expression Perl
我正在学习perl中的正则表达式,我希望有一个类似于下面的函数:
sub RegEx()
{
my $T = "0,1,";
my $T2 = "-0:0-0:1-0:2-0:3-0:4-1:0-1:1-1:2-1:3-";
printf ("T= %s <br>", $T);
printf ("T2 %s <br>", $T2);
my @values = split(',', $T);
foreach my $val (@values) {
printf ("We are at item %s in T <br>", $val);
my $temp = $val .":" . "\(\\d\)\+";
printf ("Rexeg %s <br>",$temp);
@result = split(/$temp/, $T2);
foreach my $val2 (@result) {
printf ("T2- %s <br>", $val2);
}
}
}
并根据索引($ T)将$ T2的值解析为数组
但正在显示以下内容
T= 0,1
T2 -0:0-0:1-0:2-0:3-0:4-1:0-1:1-1:2-1:3-
We are at item 0 in T
Rexeg 0:(\d)+
T2- -
T2- 0
T2- -
T2- 1
T2- -
T2- 2
T2- -
T2- 3
T2- -
T2- 4
T2- -1:0-1:1-1:2-1:3-
We are at item 1 in T
Rexeg 1:(\d)+
T2- -0:0-0:1-0:2-0:3-0:4-
T2- 0
T2- -
T2- 1
T2- -
T2- 2
T2- -
T2- 3
T2- -
请让我知道为什么我仍然看到
T2- -0:0-0:1-0:2-0:3-0:4-当正则表达式为1时:(\\ d)+
“ - ”
作为@results的输出?
split
毫无意义。 您不想拆分字符串。 你要:
my @result = $T2 =~ /$temp/g;
你真的应该在你的模式中加入“ -
”。 (考虑当数字达到10时会发生什么。)
my @result = $T2 =~ /-\Q$val\E:(\d+)/g;
( \\Q..\\E
在技术上是不需要的,如果$val
总是数字,但这是一个好习惯。)
也就是说,我可能只需解析一次T2美元。
my $T2 = "-0:0-0:1-0:2-0:3-0:4-1:0-1:1-1:2-1:3-";
my %T2; push @{ $T2{$1} }, $2 while $T2 =~ /-(\d+):(\d+)/g;
...
my @result = @{ $T2{$val} };
你分成1:(\\d)+
。 第一个匹配元素的左边是什么? 你写的字符串。
你分成1:(\\d)+
。 这个正则表达式的两场比赛之间有什么关系? 破折号。
你分成1:(\\d)+
。 这意味着,您将字符串切割成部分,并使用正则表达式的结果作为分隔符 。 使用()整数全局使它在全局结果中显示为正则表达式匹配。
现在,您可以向我们解释您想要实现的目标,然后我们可以帮助您纠正自己。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.