Frage

d., Habe ich eine Liste von Wörtern bekommen, und ich möchte einen einfachen regulären Ausdruck aus, dass konstruieren, die alle Wörter zumindest entspricht (aber vielleicht auch mehr).

Ich möchte, dass ein Algorithmus haben. D. h Eingang dieses Algorithmus ist eine Liste von Wörtern und Ausgang ist ein regulärer Ausdruck. Offensichtlich wird es einige Einschränkungen. Wie entweder der reguläre Ausdruck wird immer mehr Wörter übereinstimmen, wenn es eine unendliche Mengen von Wörtern entsprechen sollte und ich es nur eine endliche Anzahl von Wörtern geben. Oder ich werde etwas kompaktere Darstellung der Eingabe benötigen. Oder ich denke auch über mich einige reguläre Ausdrücke als Input geben und eine Liste der zusätzlichen Wörter und ich möchte einen regulären Ausdruck erhalten, die alle von ihnen passt zusammen (und vielleicht auch mehr). In jedem Fall sollte es versuchen, einen regulären Ausdruck zu konstruieren, die so einfach wie möglich ist.

Was Techniken sind availalbe, die das tun können?


Ich war ziemlich falsch verstanden. Ich weiß, dass die allgemeinen Grundsätze hinter regulären Ausdrücken. Ich weiß was es ist. Und in den meisten Fällen kann ich bis zu einem gewissen Sprache von Hand ganz leicht mit einem regulären Ausdruck kommt. Aber ich bin auf der Suche Algorithmen, die das tut.


Wieder ein wenig anders formuliert:

Sei L eine reguläre Sprache sein. Lassen Sie M_n mit n Elementen eine endliche Teilmenge von L sein. Lassen Sie M_n eine Teilmenge von M_ sein (n + 1).

Ich möchte einen Algorithmus LRE haben, die eine endliche Menge von Wörtern bekommt und gibt einen regulären Ausdruck. Und ich möchte die Eigenschaft haben:

lim_n-> Unendlichkeit | diff (LRE (M_n), L) | = 0

War es hilfreich?

Lösung

Dieses Problem wurde in den letzten zehn Jahren aussieht. Vielleicht möchten Sie DFA Lernen Google, und laden Sie ein paar Papiere ein Gefühl für den Stand der Technik zu erhalten.

Wenn Sie die DFA haben einen regulären Ausdruck zu erzeugen ist trivial. Um zu vermeiden, die Probleme @FrustratedWithDesign erwähnt einige Bedingungen wie die DFA mit der geringsten Menge von Knoten zu erzeugen eingeführt wird, von einer Maschine Sicht Lernen dies eine Regularisierung Bedingung, die für die einfachste Hypothese ähnlich ist.

Andere Tipps

Mit dieser Website finden Sie die allgemeinen Grundsätze zu lernen: http://www.regular-expressions.info/

Wenn alles, was Sie haben eine Liste von Wörtern wie dog, cat, cow, mouse ist, die einfachste regex eine dieser passen würde: dog|cat|cow|mouse, aber beachten Sie, dass es auch doggone übereinstimmen, scatological, etc .. . Es paßt DOGGONE, COWPATTY usw. kann oder auch nicht ... je nachdem, ob Ihr Fall empfindlichen Matching tun. Bessere Muster können dann gegeben werden, wenn mehr Einzelheiten über Ihr Problem gegeben werden.

Es ist auch eine gute Idee, ein Regex-Test-Tool zu erhalten. Ich mag Expresso, ist es gut für die .NET-Muster. Da Regex capabilties zwischen Plattformen, stellen Sie sicher, dass Ihr Tool unterstützt Ihre Plattform variieren kann.

Verwenden Sie diese Seite die Grundlagen und Verwendung Rubular für Live-Tests.

Wenn Sie eine Liste von verschiedenen Wörtern haben, dass Sie passen wollen -. Es nicht wie Sie klingt es ihnen gleich auf etwas, dass ein regulärer Ausdruck ist am besten bei

Wie FrustratedWithFormsDesigner wies darauf hin - Ihre regex wird zu auf die Elemente in der Liste im schlimmsten Fall abgebildet werden; besten Fall können Sie gemeinsame Präfixe finden. Und wenn Sie die regex Konstruktion automatisieren, warum mit der Regex die Mühe machen? Was ist der Anwendungsfall?

Aber wenn Ihre Liste über eine triviale Größe ist, dann würden Sie wahrscheinlich besser dran, durch sie Looping.

http://www.regular-expressions.info ist ein fantastischer Ort für Regex Referenz.

Wenn ein komplexes regex Gebäude, verwende ich normalerweise Expresso. Es ist eine kostenlose Anwendung, die Sie bauen Reguläre Ausdrücke hilft. Es bricht sie in eine Baumansicht nach unten, so dass es leicht zu sehen ist, was alle Teile tun. http://www.ultrapico.com/Expresso.htm es an die Arbeit gemacht wird mit .NET Sprachen, aber es gibt viele Tools wie diese für verschiedene Sprachen zur Verfügung.

meine Regex zu bauen, ich werde in der Regel mit einem akzeptablen Wert beginnen und Ersetzen Zeichen mit Regex Syntax starten.

Zum Beispiel, wenn ich eine URL übereinstimmen versuchte, mit ich anfangen würde,

http://www.mydomain.com

Ich würde dann nichts erwehren, dass Bedürfnisse zu entkommen

http://www\.mydomain\.com

dann würde ich anfangen Zeichen ersetzen

http://www\.\w+\.\w+\.\w+

offensichtlich dieser Ausdruck benötigt etwas mehr Arbeit, aber Sie bekommen die Idee

Hier ist eine Seite für Perl regex:

http://perldoc.perl.org/perlre.html
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top