Suchen ersetzen
Ein String ist wie ein Array - jedes einzelne Zeichen ist indexiert. PHP bietet einige Funktionen an zum Suchen und ersetzen von Zeichen und Ketten oder 'Regulären Ausdrücken' in Strings.
string[]
Was ergeben die Zeichen 0,9-11,3,0,16-18 eines Strings zusammengereiht?
Das Beispiel ist ein Witz, denn ich muss dazu ja schon wissen, wo welches Zeichen ist.
Aber ich könnte immerhin alle Zeichen von 0-11 ausgeben,
wenn mich der Anfang (die ersten 12 Zeichen) eines Strings interessierte.
<?php
$string="Das ist mein String";
echo $string[0]; // Arrays beginnen bei Null - 0 ist also erstes Zeichen
echo $string[9];
echo $string[10];
echo $string[11];
echo $string[3]; // Leerschlag
echo $string[0];
echo $string[16];
echo $string[17];
echo $string[18];
echo "<br />";
$zaehler = 0;
$limit = 12;
while ($zaehler != $limit){
echo $string[$zaehler];
$zaehler += 1;
}
?>
Das ist mein
Die Abgrenzung kann genau so gut mit geschweiften Klammern geschehen:
echo $string{0}.$string{16}.$string{17}.$string{18}.$string{9};
Dinge
Suchen
Sucht die Position eines Teilstrings
strpos();
Wenn ich zuerst wissen will an welcher Position sich ein bestimmter Teilstring befindet:
Argumente: zudurchsuchender String, gesuchter Teilstring.
<?php
print "Das S befindet sich an Position ".strpos($string,"S");
?>
Gibt die Anzahl Zeichen eines Strings zurück
strlen();
Nur ein Argument: den zu durchsuchenden String.
<?php
print strlen($string)." Zeichen misst der ganze String.";
?>
Suchen nach Mass
substr();
Die Argumente sind: zudurchsuchender String, Startposition der Wiedergabe, Anzahl wiedergegebene Zeichen. Wird die Startposition negativ gesetzt, beginnt die Startposition von Hinten abgezählt.
<?php
$member ="fuk007xyz";
echo substr($member,3,2)."<br />";
echo substr($member,-4,2);
?>
7x
Nach einem Wortlaut suchen
strstr($Heuhaufen, $Nadel);
Der Rückgabewert ist der ganze Rest ab der Fundstelle!
<?php
$text = "In diesem Text ist das Wort Arschloch enthalten.";
$wort = strstr($text,"Arschloch");
if ($wort) {
echo "In Ihrem Text befinden sich Ausdrücke, welche die Veröffentlichung verhindern.<br />";
// Der Rückgabewert ist der ganze Rest ab der Fundstelle
echo "Der Rückgabewert ist: $wort";
} else {
echo "Danke für Ihren Beitrag";
}
?>
Der Rückgabewert ist: Arschloch enthalten.
Falls die Gross/Kleinschreibung bei der Suche missachtet werden soll, ist die Funktion stristr(); zu nutzen, welche ansonsten das Selbe tut!
strstr($Heuhaufen, $Nadel, true);
Durch den optionalen, 3. Parameter ist der Rückgabewert alles vor der Fundstelle!
$Originaldatei = strstr('Originaldatei.php-Backup'),'-Backup',true); // Alles vor der Nadel ab php 5.3
Ersetzen
Ersetzten nach Wortlaut
str_replace($nadel,$ersatznadel,$heuhaufen);
Um einen Teilstring in einenem String zu zensieren gibt es eine 'vorgefertigte Funktion'.
Die Funktion erwartet als Argumente zuerst den zu ersetzenden Teil-String, dann den Ersatz-String, dann den original String, in dem ersetzt wird.
$Originaldatei = str_replace('-Backup,'',Originaldatei.php-Backup); // vergleiche Beispiel oben
Und noch ein Beispiel:
<?php
$text ="In diesem Text ist das Wort Arschloch enthalten.";
echo "Text unmanipuliert:<br/>$text<p />";
$text = str_replace("Arschloch","<strong>zensiert</strong>",$text);
echo "Text zensiert: <br/>$text";
?>
In diesem Text ist das Wort Arschloch enthalten.Text zensiert:
In diesem Text ist das Wort zensiert enthalten.
Ersetzten mit Arrays
str_replace() funktioniert auch mit Arrays!
str_replace($sucharray,$ersatzstring,$originalstring);
Mehrere Begriffe oder Suchstellen (in einem Array der Funktion übergeben) werden durch einen gleichen Strüng ersetzt.
<?php
$allevokale = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$turk = str_replace($allevokale, "ü", "Das ist ein schoenes Beispiel deutscher Sprache.");
echo $turk;
?>
str_replace($sucharray,$ersatzarray,$originalstring);
Suchen und ersetzen werden mit Array übergeben. Der erste Suchbegriff (der Sucharrays) wird durch den ersten Ersatzbegriff (des Ersatzarrays) ersetzt. hätte der Ersatzarray weniger Werte als der Sucharray, so würden die mehr gefundenen Stellen durch nichts (einen Leerstring) ersetzt.
<?php
$buchstaben = array("a)", "b)", "c)", "d)", "e)");
$zahlen = array("1.", "2.", "3.", "4.", "5.");
$weise = "a) kommt es anders und - b) als man denkt. c) Hier aber nicht.";
$neuweise = str_replace($buchstaben, $zahlen, $weise);
echo $neuweise;
?>
Ersetzten nach Massangabe
substring_replace();
Kennt man den Wortlaut nicht, dann vielleicht die Position und sogar noch die Anzahl zu ersetzenden Zeichen. Die Argumente sind: String in dem zu ersetzen ist, Ersatz, Startposition in Anzahl Zeichen, optional Anzahl zu ersetzende Zeichen.
<?php
$member ="fuk007xyz";
echo "Mitgliednummer alt: $member<br/>";
$member = substr_replace("$member","55",4,3);
echo "Mitgliednummer neu: $member";
?>
Mitgliednummer neu: fuk055yz
Einzelne Zeichen ersetzen
strtr();
Z.B. alle vorkommenden "Leerschläge" mit Bodenstrich und alle 3 mit 4. Die Funktion erwartet als Argumente zuerst den zu String in dem ersetzt wird, dann die zu ersetzenden Zeichen und, dann die Ersatz-Zeichen. Die Reihenfolge ist ausschlaggebend, alle gefundenen Zeichen werden gleich ersetzt, auch Leerschläge!
<?php
$string ="Dieses Tutorial wurde 2003 verfasst";
echo "Text original:<br />$string<p />";
$string = strtr("$string"," 3","_4");
echo "Text nach Update: <br />$string";
?>
Dieses Tutorial wurde 2003 verfasstText nach Update:
Dieses_Tutorial_wurde_2004_verfasst
Auf regulären Ausdruck überprüfen
preg_replace();
preg_replace() ersetzt einen 'regulären Ausdruck',er benötigt etwas mehr Zeit zum parsen, macht aber sonst das Gleiche wie str_replace() mit Strings macht. Früher gab es noch ereg_replace();, diese Funktion ist aber veraltet und erzeugt nun einen Fehler.
Im String suchen
preg_match()
<?php
if (preg_match("/aus/","Maus"))
{
echo "TREFFER!";
}
else
{
echo "KEIN TREFFER";
}
?>
Im Array
<?php
$Ausers = Array ("Haus","ausser","Läuse","Lausbube");
foreach ($Ausers as $value)
{
if (preg_match("/aus/","$value"))
{
echo "aus kommt vor in $value<br />\n";
}
else
{
echo "<strong>aus kommt nicht vor in $value</strong><br />\n";
}
}
?>
aus kommt vor in ausser
aus kommt nicht vor in Läuse
aus kommt vor in Lausbube
HTML Code auf Verknüpfungen durchsuchen
preg_match_all()
preg_match_all() hört nicht beim ersten Fund auf, sondern sucht weiter und speichert die Funde in einem mehrdimensionalen Array dessen Namen, nach dem Suchmuster (regexp) und dem Heuhaufen (String), als dritter Parameter angegeben wird. In einem optionalen vierten (Flag) wird bestimmt, wie der Array aufgebaut wird.
Von preg_match_all() habe ich im Teil 'andere', Kapitel 'RegEx' in der Datei
Tags analysieren ausführlich gebrauch gemacht,
auch die Flags sind dort beschrieben.
Im folgenden Beispiel wird auf E-Mail Links, Anker und CSS Links (href, #, mailto, css) geprüft.
<?php
$html = '<link href="style.css">';
$html .='<p><a href="mailto:info@biefer.com">Send E-Mail</a><br />';
$html .='<a href="http://www.biefer.com">Gehe zu biefer.com</a></p>';
$html .='<a href="#anchor">Bring mich zum Anker</a>';
$reg = "/([hH][rR][eE][fF]\s*=)([\s\"']*)(#|[Mm]ailto|.*css)(.*?)([\s>\"'])/";
if (preg_match_all($reg, $html, $teile)) {
echo '<pre>';
print_r($teile[0]);
echo '</pre>';
}
?>
Array
(
[0] => href="style.css"
[1] => href="mailto:info@biefer.com"
[2] => href="#anchor"
)
preg_split();
Eine weitere Funktionen um mit Regulären Ausdrücken zu arbeiten,
aber hier ohne Beispiel ist preg_split(), sie zerlegt eine Zeichenkette anhand eines regulären Ausdrucks.
Mehr zu regulären Ausdrücken