Equidistant Letter Sequences und Regular Expressions

Heute hat mich per WebForm Jemand gefragt ob Wörter aus äquidistante Buchstabensequenzen (ELS) mit regulären Ausdrücken erkannt werden können. Beispielsweise soll geprüft werden, ob das Wort "foo" als ELS im Text "abf1 2o 3bor z32" vorkommt (tut es, mit Intervalllänge 4 (f suchen, dann jeweils 3 Zeichen überspringen)).

Eine äquidistande Buchstabensequenz mit unbekannter und beliebig grosser Intervalllänge n ist keine reguläre Sprache und kann folglich nicht mit einem regulären Ausdruck beschrieben werden. Dies kann einfach mit dem Pumping Lemma bewiesen werden.

Falls allerdings das gesuchte Wort bekannt und die Intervalllänge mit einem Maxima m eingegrenz werden kann (n<=m) ist die Sprache regulär und kann mit einem regulären Ausdruck beschrieben werden - wenn auch mit einem hässlichen: "(f.{0}o.{0}o|f.{1}o.{1}o|f.{2}o.{2}o|...|f.{m}o.{m}o)" (Das Pattern muss m mal wiederholt werden, mit jeweils inkrementierter Zahl zwischen den geschweiften Klammern).

Falls ELS im grösseren Rahmen erkannt werden sollten, lohnt es sich wohl einen kleinen eigenen Parser zu schreiben statt die Regex zu verwenden - mit einem solchen einfachen spezialisierten Parser ergibt sich die Intervalllängenbeschränkung, und das ganze wird wahrscheinlich wesentlich performanter ablaufen...

Comments

No Comments