Perl正则表达式匹配忽略顺序

时间:2011-10-07 05:17:58

标签: regex perl

我试图比较一个变量和另一个变量形式的变量。如果变量的内容完全相同,则匹配很好但如果值的顺序不同,我希望匹配发生。

示例:

#!/usr/bin/perl

my $output  = "test0 test1";
my $expected_output = "test1 test0";
 my $expected_regex = qr/^$expected_output\s*$/;
print "Expected_regex ::  $expected_regex\n";
 if ($output =~ $expected_regex) {
   print "pass\n";
}

在我的示例中,即使它们包含相同的值但不包含相同的顺序,我还能做些什么来制作$output = $expected_regex

1 个答案:

答案 0 :(得分:4)

假设您的输入真的“那么简单”,即用空格分隔的单词,您可以这样做:

#! /usr/bin/perl -w
use strict;
use warnings;

my $output  = "test0 test1";
my $expected_output = "test1 test0";

# Store the sorted pieces of each string in a list
my @o = sort(split(/ /, $output));
my @e = sort(split(/ /, $expected_output));

# Compare both arrays for equality of each member
print "pass\n" if (@o ~~ @e);

请参阅smart matching in detail了解有趣的~~运算符。

如果您的输入不是那么简单,可能会详细阐述分割中的/ /,或者可以推导出类似的技术。

如果没有,只需保留前两行并将其放入所有非平凡的脚本中。这肯定能帮到你。