ich mich für ein Stück Code suchen, der wird:ein RE gegeben, leiten den größten Teilzeichen Spiel
Given regular expression E, derive the longest string X
such that for every S, X is a substring of S iff S will match E
Beispiele:
E = "a", X = "a"
E = "^a$", X = "a"
E = "a(b|c)", X = "a"
E = "[ab]", X = ""
Kontext: Ich möchte gegen einige reguläre Ausdrücke passen Ein Datenspeicher , der nur Teilstringsuche unterstützt. Es wäre nett , die Regular Expression-Suche zu optimieren, indem Sie einen Teilstring Suche in den Datenspeicher, um die Menge der übertragenen Daten so viel wie möglich zu reduzieren.
Beispiel 2:
Wenn ich "Fehler foo" fangen will, "Fehlerbalken", "Fehler baz", ich
error: (foo|bar|baz)
und sende
search "error: "
angeben kann in den Datenspeicher und dann erneut die zurückgegebenen Elemente.
Danke!
Wenn E = "a (b | c) def", dann ist X = "def"? Die Suche nach "def" ist nicht ohne zusätzliche Informationen sofort hilfreich. Oh, und sollten alle diese "S =" "X =" sein? –
(1) Ja, wenn ich den Datenspeicher veranlassen kann, nach "def" zu suchen, kann ich den regulären Ausdruck auf einen hoffentlich kleineren Datensatz anwenden. Tests an einigen handgenerierten Beispielen zeigen eine gute Beschleunigung. (2), ja, S sollte X sein, behoben, danke! –
Also, was sollte für "^ [^ a] {1,10} a $" zurückgegeben werden? – Tomalak