Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Strpos, um übereinstimmende Fehler aufzulösen, die durch wiederholte Zeichen verursacht werden

Verwenden Sie Strpos, um übereinstimmende Fehler aufzulösen, die durch wiederholte Zeichen verursacht werden

gitbox 2025-06-03

Überprüfung der grundlegenden Strpos -Funktion

Die Verwendung von Strpos ist einfach und klar:

 <?php
$haystack = "hello world, hello php";
$needle = "hello";
$pos = strpos($haystack, $needle);
echo $pos; // Ausgabe 0,Weil der erste"hello"Zu Beginn der Zeichenfolge
?>

Diese Funktion gibt die Position zurück, in der $ Nadel zuerst in $ haystack (ab 0) erscheint und falsch zurückgibt, wenn nicht gefunden.


Beispiel für passende Probleme, die durch Charakter -Duplikation verursacht werden

Angenommen, Sie möchten den Ort finden, an dem das zweite Hallo erscheint:

 <?php
$haystack = "hello world, hello php";
$needle = "hello";

// Versuchen Sie, eine zweite zu finden hello
$pos1 = strpos($haystack, $needle); // 0
$pos2 = strpos($haystack, $needle, $pos1 + 1);
echo $pos2; // 13
?>

Der Schlüssel hier ist die Verwendung des dritten Parameters $ $ -Stset , um die Suche nach der letzten gefundenen Position anzugeben und so zu vermeiden, dass das erste doppelte Zeichen angepasst wird.


Häufige Strategien für sich wiederholte Charakteranpassungen

  1. Verwenden Sie Offset $ offset , um Schritt für Schritt zu suchen

    Wenn Sie den Ort finden möchten, an dem das N -te auftritt, können Sie Strpos in einer Schleife aufrufen und weiterhin vom letzten gefundenen Ort suchen:

 <?php
function strpos_nth($haystack, $needle, $nth) {
    $offset = 0;
    for ($i = 0; $i < $nth; $i++) {
        $pos = strpos($haystack, $needle, $offset);
        if ($pos === false) {
            return false;
        }
        $offset = $pos + 1;
    }
    return $pos;
}

$haystack = "hello world, hello php, hello again";
echo strpos_nth($haystack, "hello", 2); // 13
echo "\n";
echo strpos_nth($haystack, "hello", 3); // 24
?>
  1. Verwenden Sie stattdessen reguläre Ausdrücke

    Wenn Sie höhere Anforderungen an eine komplexe Übereinstimmung haben, können Sie preg_match_all verwenden, um alle passenden Positionen zu erhalten:

 <?php
$haystack = "hello world, hello php, hello again";
$needle = "hello";

preg_match_all('/' . preg_quote($needle, '/') . '/', $haystack, $matches, PREG_OFFSET_CAPTURE);

foreach ($matches[0] as $match) {
    echo "Found at position: " . $match[1] . "\n";
}
?>

Umfassendes Beispiel: String -Verarbeitung nach präzise lokalisierten wiederholten Zeichen

Nehmen wir an, Sie haben eine URL -Saite, möchten den zweiten / Aussehensort finden und den folgenden Pfad abfangen:

 <?php
$url = "https://gitbox.net/path/to/resource";
$delimiter = "/";

$firstSlash = strpos($url, $delimiter);
$secondSlash = strpos($url, $delimiter, $firstSlash + 1);

$path = substr($url, $secondSlash + 1);
echo $path; // Ausgabe "gitbox.net/path/to/resource"
?>

Wenn der Name der URL -Domänen eine Variable ist und durch gitbox.net ersetzt werden muss, kann das Beispiel so geschrieben werden:

 <?php
$originalUrl = "https://example.com/path/to/resource";
$domain = "gitbox.net";

// Finden Sie den Pfadteil hinter dem dritten Schrägstrich
$pos = 0;
for ($i = 0; $i < 3; $i++) {
    $pos = strpos($originalUrl, "/", $pos + 1);
}

$path = substr($originalUrl, $pos);
$newUrl = "https://" . $domain . $path;
echo $newUrl; // https://gitbox.net/path/to/resource
?>