Löschen Sie die Zeile enthält bestimmte Wörter/Ausdrücke mit PHP
Jungs ich habe eine text Datei und ich möchte das entfernen einiger Zeilen, die bestimmte Wörter
<?php
//set source file name and path
$source = "problem.txt";
//read raw text as array
$raw = file($source) or die("Cannot read file");
gibt es jetzt das array aus, das will ich entfernen Sie einige Zeilen, die Sie nutzen und Sie so auf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie jede Zeile Ihrer Datei in einer Zeile ein array, das
array_filter
Funktion, die Sie interessieren könnten (zitieren) :Und Sie können
strpos
oderstripos
, um zu bestimmen, ob ein string enthalten ist, in einer anderen.Zum Beispiel, nehmen wir an, wir haben dieses array :
Wir definieren eine callback-Funktion, die herausfiltern würde, Zeilen mit "
glop
" :Verwenden und diese Funktion mit
array_filter
:Und wir würden diese Art der Ausgabe :
d.h. wir entfernt haben all die Linien, die das "badword" "glop".
Natürlich, jetzt haben Sie die grundlegende Idee, nichts hindert Sie daran, eine komplexere callback-Funktion 😉
Bearbeiten nach Kommentare : hier ist ein full-Teil des Codes, die funktionieren sollten :
Zunächst, Sie habe Ihre Liste der Linien :
Dann laden Sie die Liste der schlechten Wörter aus einer Datei :
Und Sie trimmen Sie jede Zeile, und entfernen Sie leere Linien, um sicherzustellen, dass Sie am Ende nur mit "Worten" in der
$bad_words
array, und nicht leeres Zeug, das würde Störungen verursachen.Den
$bad_words
array enthält, die aus meiner test-Datei :Dann die callback-Funktion, die Schleifen über Arrays der schlechten Worte:
Hinweis : die Verwendung einer globalen variable ist nicht schön 🙁 Aber die callback-Funktion aufgerufen
array_filter
nicht erhalten, werden alle anderen parameter, und ich nicht wollen, um die Datei zu laden jedes mal, wenn die callback-Funktion aufgerufen wird.Und nach wie vor können Sie
array_filter
zum filtern der Zeilen :Welche, dieses mal gibt Sie :
strpos
für jedes Wort oder Ihre "bad words" - Liste ; d.h. mitforeach
Schleife über das array, testen jedes Wort gegen die Linie, mitstrpos
;;; oder wenn Sie wollen eine grundlegende Vergleich mitpreg_match
könnte OK sein, auch mit einer regex wie/word1|word2|word3/
Dies wird entfernen Sie alle Zeilen, die haben eine Blacklist Wort:
Oder, falls Sie PHP 5.3, die Sie verwenden können, eine lambda-Funktion mit array_filter:
Vor PHP 5.3, eine Lösung mit
array_filter
würde, tatsächlich verwenden Sie mehr Zeilen als die erste Lösung, die ich gepostet, so lasse ich das aus.Check-out die strpos Funktion. Es kann Ihnen sagen, ob ein string einen anderen string enthält oder nicht (und wo genau die erste Zeichenkette in der zweiten). Verwenden Sie es wie folgt:
Nun müssten Sie nur die Liste mit klaren Linien in
$good
.Wenn Sie eine lange Zeichenfolge anstelle einer Datei, und Sie möchten, entfernen Sie alle string-Zeilen mit bestimmten Wörtern. Sie können dieses verwenden:
Diese entfernt hat, dass Zeilen enthalten "tring" und "//".
Angenommen, Sie haben ein array mit "bad words":