Perl регулярное выражение, игнорирующее порядок - PullRequest
2 голосов
/ 07 октября 2011

Я пытаюсь сравнить переменную и другую переменную в форме регулярного выражения. Если содержимое переменных в точности совпадает, совпадение происходит нормально, но если порядок значений отличается, я хочу, чтобы совпадение произошло.

Пример:

#!/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 Ответ

4 голосов
/ 07 октября 2011

Если ваши входные данные действительно "настолько просты", то есть слова разделены пробелами, вы можете сделать что-то вроде этого:

#! /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);

См. интеллектуальное сопоставление в деталях для забавного оператора ~~.

Если ваши входные данные не так просты, возможно, будет разработан / / в разбиениях, или может быть получен аналогичный метод.

Если нет, просто оставьте первые две строки этого и поместите их во все свои нетривиальные сценарии.Это обязательно поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...