Suche nach als

Suchen ersetzen

Auf dieser Seite:

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;
}
?>
Dein Ding
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");
?>
Das S befindet sich an Position 13

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.";
?>
19 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);
?>
00
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";
}
?>
In Ihrem Text befinden sich Ausdrücke, welche die Veröffentlichung verhindern.
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";
?>
Text unmanipuliert:
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;
?>
Düs üst üün schüünüs Büüspüül düütschür Sprüchü.

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;
?>
1. kommt es anders und - 2. als man denkt. 3. Hier aber nicht.

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 alt: fuk007xyz
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";
?>
Text original:
Dieses Tutorial wurde 2003 verfasst

Text 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";
    }
?>
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 Haus
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

 


Valid XHTML 1.0 Check den Code.

Zahlen: >> << PHP Code ausgeben
Ich bin hier: > PHP Lehrling >>> Suchen ersetzen
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 10.05.2012