我可以将单个字符串与完整数组进行比较。在下面的情况下,我无法满足条件可能是由于区分大小写的不正确的正则表达式,我想匹配任何单词。
例如。移动1-2步应匹配1-2步,移动8-10步应匹配8-10步等。
my @db_description=("MOVE 1-2 STEPS TO GB FIXTURE","WITHIN REACH TO CHECK","GET BEAM","PUSH/PULL ( >= 30 CM)","BEAM 2-3 TIMES","MOVE 8-10 STEPS TO HOIST");
my @steps_name = ("1-2 Steps", "5-7 Steps", "8-10 Steps", "11-15 Steps");
for(my $i=0;$i<@db_description;$i++)
{
if (grep { /(?i)\Q$db_description[$i]\E/ } @steps_name)
{
print "<br><h1>Element '$db_description' found !</h1></br>" ;
}
else
{
print "<br>$db_description not found </br>"
}
}
答案 0 :(得分:0)
你写了一些可怕的Perl,我不确定你的意思。你能更好地解释一下吗?
看起来你想解析一个定制的语言,所以简单的字符串拼写不起作用
这个作业是基于你指定的机器吗?或者你这样做是为了谋生吗?如果是后者,那么你隐瞒了我们的信息,所以我们无法帮助你。
显而易见的问题是你的C风格的for
循环作为范围会更好,但你永远不会在循环块中使用$i
这是我手动整理的代码版本。我希望能帮助别人帮助你
my @db_description = (
"MOVE 1-2 STEPS TO GB FIXTURE",
"WITHIN REACH TO CHECK",
"GET BEAM",
"PUSH/PULL ( >= 30 CM)",
"BEAM 2-3 TIMES",
"MOVE 8-10 STEPS TO HOIST",
);
my @steps_name = (
"1-2 Steps",
"5-7 Steps",
"8-10 Steps",
"11-15 Steps",
);
for ( my $i = 0; $i < @db_description; $i++ ) {
if ( grep { /(?i)\Q$db_description[$i]\E/ } @steps_name ) {
print "<br><h1>Element '$db_description' found !</h1></br>";
}
else {
print "<br>$db_description not found </br>";
}
}
旁白:除非您特别需要,否则请永远不要使用(?i)
。例如,构建一个将用作其他模式的一部分的正则表达式模式,而限制仅适用于子模式。
答案 1 :(得分:-1)
他的问题有效..请尝试以下代码
my @db_description=("MOVE 1-2 STEPS TO GB FIXTURE","WITHIN REACH TO CHECK","GET BEAM","PUSH/PULL ( >= 30 CM)","BEAM 2-3 TIMES","MOVE 8-10 STEPS TO HOIST");
my @steps_name = ("1-2 Steps", "5-7 Steps", "8-10 Steps", "11-15 Steps");
my $testString1;
my $testString2;
my @abc;
my @xyz;
for(my $i=0;$i<$#db_description;$i++)
{
@abc = split (/ /,$db_description[$i]);
for(my $j=0;$j<$#steps_name;$j++)
{
@xyz = split (/ /, $steps_name[$j]);
for (my $i1=0; $i1<$#abc; $i1++)
{
for (my $j1=0; $j1<$#xyz; $j1++)
{
if ($abc[$i1] eq $xyz[$j1])
{
print "$db_description[$i] :: found $abc[$i1] == $xyz[$j1]\n";
}
}
}
}
}