Perl-Regex-match-Linien, die mehrere Wörter enthalten
Ich versuche zu entwickeln, die eine ziemlich schnelle Volltextsuche. Es wird der index gelesen wird, und sollte idealerweise führen Sie den Abgleich in nur einem regex.
Deshalb brauche ich eine regex, die Spiele Linien nur dann, wenn bestimmte Wörter enthalten sind.
E. g. für
my $txt="one two three four five\n".
"two three four\n".
"this is just a one two three test\n";
Nur Zeile eins und drei abgestimmt werden sollte, da die Zeile zwei enthält nicht das Wort "man".
Nun, ich könnte gehen über jeder Zeile in einer while (), oder verwenden Sie mehrere regexes, aber ich brauche meine Lösung schnell sein.
Beispiel von hier:
http://www.regular-expressions.info/completelines.html
("Finding Linien Enthält oder Nicht Enthält Bestimmte Wörter")
ist, was ich brauche. Allerdings kann ich es nicht zu funktionieren in Perl. Habe viel versucht, aber es funktioniert einfach nicht kommen mit jeder Folge.
my $txt="one two three four five\ntwo three four\nthis is just a one two three test\n";
my @matches=($txt=~/^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$/gi);
print join("\n",@matches);
Gibt keine Ausgabe.
In der Zusammenfassung:
Ich brauche einen regulären Ausdruck für Zeilen, in denen mehrere Wörter, und die Rückkehr sind diese ganzen Linien.
Dank im Voraus für Eure Hilfe! Ich habe schon so viel ausprobiert, aber einfach nicht bekommen es funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
^
und$
meta-char standardmäßig passen nur die start - und Ende der Eingabe. Lassen Sie entsprechen dem Anfang und Ende der Zeilen, aktivieren Sie diem
(MULTI-LINE) Flagge:produziert:
Aber, wenn Sie wirklich wollen, eine schnelle Suche, regex (mit einer Menge von look-aheads) ist nicht der Weg zu gehen, wenn Sie mich Fragen.
Code:
Resultierenden:
Abschluss
So, in der Variante mit while ist schneller als die Variante mit den regexp.`