2 Stimmen

Perl-Regex-Übereinstimmung ignoriert Reihenfolge

Ich versuche, eine Variable und eine andere Variable in Regex-Form zu vergleichen. Wenn die Inhalte der Variablen genau gleich sind, geschieht der Abgleich problemlos, aber wenn die Reihenfolge der Werte unterschiedlich ist, möchte ich, dass der Abgleich erfolgt.

Beispiel:

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

Was kann ich in meinem Beispiel tun, damit $output = $expected_regex auch wenn sie die gleichen Werte enthalten, aber nicht in der gleichen Reihenfolge?

4voto

Mat Punkte 195740

Angenommen, Ihre Eingaben wirklich "so einfach" sind, d. h. durch Leerzeichen getrennte Wörter, können Sie etwa so vorgehen:

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

Voir Smart Matching im Detail für das Lustige ~~ Betreiber.

Wenn Ihre Eingaben nicht so einfach sind, kann die / / in den Splits könnte möglicherweise ausgearbeitet werden, oder es könnte eine ähnliche Technik abgeleitet werden.

Wenn nicht, behalten Sie einfach die ersten beiden Zeilen und fügen Sie sie in alle Ihre nicht-trivialen Skripte ein. Das wird Ihnen sicher helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X