Wie kann ich finde das erste vorkommen eines Musters in einer Zeichenfolge von einigen Ausgangsposition?
Ich habe ein string von beliebiger Länge, und beginnend an position p0, die ich brauche zu finden das erste vorkommen eines von drei 3-Buchstaben-Muster.
Davon aus der string enthält nur Buchstaben. Ich muss die Anzahl der Drillinge beginnend an position p0 und springen nach vorne in Dreiergruppen, bis das erste vorkommen von 'aaa' oder 'bbb' oder 'ccc'.
Ist dies sogar möglich, mit nur einem regex?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Moritz sagt, dies könnte schneller als ein regex. Auch wenn es ein wenig langsamer, es ist einfacher zu verstehen, auf 5 bin. 🙂
(Angenommen, p0 ist 0-basiert).
Natürlich, ist es wahrscheinlich effizienter zu nutzen substr auf die Zeichenfolge zu überspringen:
Kann man nicht wirklich zählen mit regexes, aber Sie können etwas wie das hier tun:
Aber ich denke, es ist ein bisschen schneller, um die Verwendung von substr() und unpack() auf, aufgeteilt in Dreier-und zu Fuß die Tripel in eine for-Schleife.
(edit: es ist length(), nicht length() 😉
Den wichtigsten Teil dieser split ist /(...)/. Aber am Ende dieser, Sie haben Ihre Positionen und Daten zum vorkommen.
Oder für einfache zählen durch regex (es verwendet eine Experimentelle (??{}))
Wenn die Geschwindigkeit ist ein ernstes Problem, Sie können, je nachdem, was die 3 Saiten sind, bekommen Lust, durch die Schaffung einer Struktur (z.B. Aho-Corasick-Algorithmus oder ähnliches).
Einer map für jeden möglichen Zustand möglich ist, z.B. Staat[0]['a'] = 0, wenn keine strings beginnen mit 'a'.