Stringverarbeitung in PHP
Links
- https://www.php.net/manual/en/language.functions.php
- PHP
- PHP-Funktionen
- PHP-Anweisungen
- PHP-Arrays
- PHP-Klassen
- Stringverarbeitung in PHP
Zielsetzung
Strings sind Zeichenketten.
Ein ganz wesentlicher Teil von Programmierung ist das Arbeiten mit Strings:
- Strings umwandeln
- Suchen in Strings
- Eigenschaften von Strings ermitteln.
Stringkonstanten
In PHP gibt es drei Möglichkeiten, Stringkonstanten zu definieren:
<?php
$a = 'Hello';
$b = "$a World\n";
$c = <<<EOS
<html>
<body>
<h1>$b</h1>
</body>
</html>
EOS;
$a = 'Hello';
: die Stringkonstante mit Ticks ' wird nicht interpoliert: Variablen werden nicht erkannt, Metazeichen wie '\n' werden nicht erkannt.$b = "$a World\n";
: die Stringkonstante mit doppeltem Appostroph wird interpoliert: Variablen werden durch ihren Wert ersetzt, Metazeichen wie '\n' werden ersetzt.$c = <<<EOS ... EOS;
: Diese Form wird "Here-Document" genannt:- Der String beginnt mit "<<<" und einem Namen wie EOS.
- Es folgen Zeilen, die zum String gehören.
- Am Ende steht der obige Name (z.B. "EOS") und ein ';'
- Diese Form wird eingesetzt, wenn viele Zeilen in einem String vorkommen.
- Dieser String wird interpoliert: Variablen werden durch ihren Wert ersetzt, Metazeichen wie '\n' werden ersetzt.
Wichtige Funktionen mit String
Stringlänge ermitteln und Teilstrings bilden: strlen() und substr()
<?php
$a = "Hello world!";
// function strlen(string $string): int zählt die Anzahl der Zeichen in $string
echo 'Länge von $a": ', strlen($a), "\n";
// function substr(string $string, int $offset, ?int $length = null): string schneidet $length Zeichen ab $offset aus $string:
echo 'substr($a, 3, 2): ', substr($a, 3, 2), "\n";
// $count kann weggelassen werden: dann wird der Rest genommen:
echo 'substr($a, 5): ', substr($a, 5), "\n";
Aufgaben
- Schreibe eine Funktion maxString(string $string, int $maxLength), die $string zurückgibt, wenn der String kürzer als $maxLength ist, sonst nur die ersten $maxLength Zeichen.
- Schreibe eine Funktion lastChar(string $string), die das letzte Zeichen zurückgibt oder "", wenn $string leer ist.
Suche mit strpos() und strrpos()
<?php
$a = "Hello world!";
// function strpos(string $haystack, string $needle, int $offset=0) liefert den Index des ersten Treffers nach dem Offset $offset
echo "strpos('$a', 'l', 4): ", strpos($a, "l", 4), "\n";
// $offset kann weggelassen werden: dann ist $offset 0:
echo "strpos('$a', 'l', 4): ", strpos($a, "l"), "\n";
// function strrpos(string $haystack, string $needle, int $offset=0) liefert den letzten Treffer v
echo "strrpos('$a', 'l'): ", strrpos($a, "l"), "\n";
if (strpos($a, 'world') !== false){
echo "'$a' enthält 'world'\n";
} else {
echo "'$a' enthält NICHT 'world'\n";
}
echo "Varianten, die die Groß/Kleinschreibung ignorieren:\n";
// function stripos(string $haystack, string $needle, int $offset=0) liefert den Index des ersten Treffers nach dem Offset $offset
echo "stripos('$a', 'World', 4): ", stripos($a, 'World', 4), "\n";
// strripos(string $haystack, string $needle, int $offset = 0): int|false
echo "strripos('<HTML><BODY>Hi World</BODY></HTML>', 'body'): ", strripos('<HTML><BODY>Hi World</BODY></HTML>', 'body'), "\n";
Aufgaben
- Definiere eine Funktion, die aus einem HTML-Text den Titel herausfindet und zurückgibt.
- Teste mit "<html><head><title>Wow</title><body></body></html"
- Definiere eine Funktion, die wesentliche Fehler in einer EMail-Adresse vermeidet.
Umwandeln in oder aus Array: explode() und implode()
<?php
$a = "Dies ist ein Satz mit mehreren Wörtern";
// function explode(string $separator, string $string, int $limit = PHP_INT_MAX): array Zerlegt einen String in ein Array.
$words = explode(' ', $a);
foreach ($words as $w){
echo $w, "\n";
}
echo 'Das erste und das letzte Wort: ', $words[0], ' / ', $words[count($words) - 1], "\n";
// function implode(string $separator, array $array): string: Setzt einen String aus einem Array zusammen:
echo implode('-', $words), "\n";
Aufgaben
- Formuliere eine Funktion, die aus einer Pfadangabe, beispielsweise "/etc/nginx/sites-available/wiki.hamatoma.de", den Dateinamen, hier "wiki.hamatoma.de" ermittelt.
- Teste mit /home/ck
- Teste mit: /etc/nginx/sites-available/wiki.hamatoma.de
- Teste mit /home
- Formuliere eine Funktion, die aus einer Pfadangabe, beispielsweise "/etc/nginx/sites-available/wiki.hamatoma.de", den Verzeichnispfad, hier "/etc/nginx/sites-available", ermittelt.
- Formuliere eine Funktion, die die Anzahl der Wörter eines Strings ermittelt: Wörter werden durch ' ' getrennt.
- Teste mit "Ich kann endlich Wörter in einem Satz zählen!".
Eigenschaften testen:
- str_contains(): Testen, ob ein Teilstring in einem String ist
- str_ends_with(): Testen, ob ein Teilstring am Ende eines Strings ist
- str_start_with(): Testen, ob ein Teilstring am Anfang eines Strings ist
- str_cmp(): Zwei Strings vergleichen: Liefert positive Zahl, wenn "größer", 0, wenn gleich, negativ wenn "kleiner"
- str_ncmp(): Zwei Strings vergleichen, aber nur die ersten paar Zeichen: Liefert positive Zahl, wenn "größer", 0, wenn gleich, negativ wenn "kleiner"
<?php
// str_contains(string $haystack, string $needle): bool
echo "str_contains('Eine Ananas', 'ana'): ", str_contains('Eine Ananas', 'ana'), "\n";
// str_ends_with(string $haystack, string $needle): bool
echo "str_ends_with('chapter.txt', '.txt'): ", str_ends_with('chapter.txt', '.txt'), "\n";
// str_starts_with(string $haystack, string $needle): bool
echo "str_starts_with('https://hamatoma.de', 'http'): ", str_starts_with('https://hamatoma.de', 'http'), "\n";
// strcmp(string $string1, string $string2): int
echo "strcmp('abc', 'xyz'): ", strcmp('abc', 'aba'), "\n";
echo "strcmp('abc', 'aba'): ", strcmp('abc', 'aba'), "\n";
// strncmp(string $string1, string $string2, int $length): int
echo "strncmp('Hallo Herr', 'Hallo Frau', 5): ", strncmp('Hallo Herr', 'Hallo Frau', 5), "\n";
echo "strncmp('Hallo Herr', 'Hallo Frau', 7): ", strncmp('Hallo Herr', 'Hallo Frau', 7), "\n";
Aufgaben
- Schreibe eine Funktion, die prüft, ob eine URL einer Webseite aus Deutschland kommt oder nicht. Wenn ja, diese URL ausgeben, sonst nicht.
- Prüfe mit "wiki.hamatoma.de"
- Prüfe mit "https://GOOGLE.COM"
Konversion
- strtolower(): In Kleinbuchstaben wandeln
- strtoupper(): In Großbuchstaben wandeln
- str_replace(): einen Teilstring durch einen anderen ersetzen
- str_ireplace(): einen Teilstring durch einen anderen ersetzen. Groß-/Kleinschreibung ignorieren.
- str_repeat(): einen String vervielfachen
- trim(): vorgegebene Zeichen, beispielsweise Leerzeichen, am Anfang und am Ende entfernen
- ltrim(): vorgegebene Zeichen, beispielsweise Leerzeichen, am Anfang (left) entfernen
- rtrim(): vorgegebene Zeichen, beispielsweise Leerzeichen, am Ende (right) entfernen
<?php
// strtolower(string $string): string
echo "strtolower('MeinBild.jpg'): ", strtolower('MeinBild.jpg'), "\n";
// str_repeat(string $string, int $times): string
echo "str_repeat('x', 10): ", str_repeat('x', 10), "\n";
// str_ireplace(array|string $search, array|string $replace, string|array $subject, int &$count = null): string|array
echo "str_ireplace('jpg', 'jpg', 'home.JPG'): ", str_ireplace('jpg', 'jpg', 'home.JPG'), "\n";
// str_replace(array|string $search, array|string $replace, string|array $subject, int &$count = null): string|array
echo "str_replace('.txt', '.doc', 'example.txt'): ", str_replace('.txt', '.doc', 'example.txt'), "\n";
// trim(string $string, string $characters = " \n\r\t\v\x00"): string
echo "trim(' 10.200 '): ", trim(' 10.200 '), "\n";
echo "trim('/abc/def/', '/'): ", trim('/abc/def/', '/'), "\n";
// rtrim(string $string, string $characters = " \n\r\t\v\x00"): string
echo "rtrim(' 10.200 '): ", rtrim(' 10.200 '), "\n";
// ltrim(string $string, string $characters = " \n\r\t\v\x00"): string
echo "ltrim(' 10.200 '): ", ltrim(' 10.200 '), "\n";
Aufgaben
- Schreibe eine Funktion correct(), die einen Text bekommt. Wenn der Text "z.B" enthält, soll das durch "beispielsweise" ersetzt werden. "quasi" soll entfernt werden. " ?" soll durch "?" und " ." durch "." ersetzt werden.
- Teste mit "Hier muss eine Farbe, z.B. rot, eingesetzt werden. Das ist quasi der Standard."
- Teste mit "Kommst du ? Ich freue mich ."
- Schreibe eine Funktion, die eine Prozentzahl als Balken aus "=" ausgibt. Für jedes Prozent ein '='. Der Balken soll immer 100 Zeichen lang sein. Die restlichen Zeichen sollen Punkte '.' sein.
- Teste mit 10%, 99%