3 Stimmen

Perl regulärer Ausdruck für englisches Wort

Ich brauche einen regulären Ausdruck, der alles findet, was wie ein englisches Wort aussieht. Insbesondere möchte ich, dass der Ausdruck übereinstimmt, wenn ein String folgendes hat:

1) nur Buchstaben; und

2) mindestens zwei verschiedene Buchstaben. (Ich schließe absichtlich Ein-Buchstaben-Wörter aus.)

Also suche ich etwas, das the und abracadabra passen würde, aber nicht aaa.

Jede Hilfe wird sehr geschätzt.

7voto

moinudin Punkte 125641

Vielleicht funktioniert \b(\w*(\w)\w*(?!\2)\w+)\b für dich. Es behandelt die Beispiele, die du gibst.

Es passt einen Buchstaben \w in eine Gruppe ein und sucht dann nach einem anderen Buchstaben mithilfe von Rückverweisen und negativem Ausblick (?!\2). Wir passen mindestens ein Zeichen am Ende an, was notwendig ist, um den negativen Ausblick dazu zu zwingen, mindestens ein anderes Zeichen zu verwenden. Dann platzieren wir zusätzliche \w*'s herum, um zusätzliche Buchstaben zuzulassen. \b stellt sicher, dass die Enden der Übereinstimmungen an Wortgrenzen liegen.

http://www.rubular.com/r/pwjGi9eLf5

Bitte beachte, dass dies kein super tolles reguläres Ausdruck ist, das nur englische Wörter erfasst. Dafür müsstest du mit einem Wörterbuch vergleichen. Aber das scheint nicht das zu sein, wonach du hier suchst.

4voto

Ether Punkte 51044

Überprüfen Sie Lingua::EN::Splitter:

use strict; use warnings;
use Lingua::EN::Splitter qw(words);

my @words = words $input_text;
print @words;

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