Wie passen Sie zu mit und tilde-Zeichen in einem regulären perl-Ausdruck (regexp)?

Nutzer eine Reihe von Namen mit Akzenten und Tilden:

Renato Núñez, David DeJesús, and Edwin Encarnación 

Meine Datenbank hat anglisierte Namen für diese Menschen

@names = ('Renato Nunez','David DeJesus','Edwin Encarnacion');

Wünsche ich zu tun, ein regexp-match auf diesen Namen.

$string = "Renato Núñez, David DeJesús, and Edwin Encarnación";
foreach my $name (@names) {
    print "found:$name\n" if ($name =~ /$string/);
}

Als aktuell präsentiert, bekomme ich keine Treffer.

Ich habe versucht, aber es hat nicht funktioniert.

$string = "Renato Núñez, David DeJesús, and Edwin Encarnación";
foreach my $name (@names) {
    $name =~ s|a|[áa]|;
    $name =~ s|e|[ée]|;
    $name =~ s|i|[íi]|;
    $name =~ s|o|[óo]|;
    $name =~ s|u|[úu]|;
    $name =~ s|n|[ñn]|;
    # Originally: print "found:$name\n" if ($name =~ /$string/);
    # Corrected to:
    print "found:$name\n" if ($string =~ /$name/);
}

EDIT: sorry, ich hatte $name und $string Umgekehrt in der letzten Zeile.

Irgendwelche Vorschläge?

Vorschlag 1: Operatoren für Reguläre Ausdrücke in perldoc perlop. Ich denke, Sie wollen sagen $string =~ /$name/ statt $name =~ /$string/, und s|[áa]|a| statt s|a|[áa]|.
ich habe die s||| Bestellung die Art, wie ich tun, weil ich bauen will ein regex, der aus der Zeichenfolge "David DeJesus" zu entsprechen, wird der name mit oder ohne Akzent.
Oh, jetzt sehe ich. Sie versuchen, erstellen Sie einen regulären Ausdruck in $name, nicht zu Streifen aus dem un-anglisierte Zeichen.
schauen Sie sich den code habe ich soeben auf meine Antwort zu zeigen, wie Sie entsprechen, Zeichenfolgen, die möglicherweise Akzente in Sie, ohne darum zu sorgen, ob Sie es tun oder nicht.

InformationsquelleAutor Sean | 2011-03-01

Schreibe einen Kommentar