Frage Finden Sie einen Teil einer Zeichenkette und geben Sie die ganze Zeichenkette aus


Ich würde gerne einen Teil einer Zeichenkette finden und wenn true Ich möchte die gesamte gefundene Zeichenfolge ausgeben.

Unten ist ein Beispiel:

$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

if(strstr($Find, $Towns)){
    echo outputWholeString($Find, $Towns); // Result: Eccleston.
}

Wenn jemand etwas Licht darüber werfen kann, wie man das auch macht, und daran denken, dass es keine statischen Werte sein wird; das $Towns und $Find Variablen werden in meinem Live-Skript dynamisch zugewiesen.


6
2018-06-29 13:07


Ursprung


Antworten:


Benutzen explode() und strpos() wie

$Towns = "Eccleston, Aberdeen, Glasgow";
$data=explode(",",$Towns);// 
$Find = "Eccle";
foreach ($data as $town)
if (strpos($town, $Find) !== false) {
    echo $town;
}

DEMO


5
2018-06-29 13:14



Sie müssen verwenden strpos () nach einer Zeichenfolge in einer anderen suchen:

if( strpos($Towns, $Find) === false ) {
    echo $Towns;
}

Beachten Sie, dass Sie "===" verwenden müssen, um zu wissen, ob strpos () false oder 0 zurückgegeben hat.


1
2018-06-29 13:13



Die Lösung mit preg_match Funktion:

$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

preg_match("/\b\w*?$Find\w*?\b/", $Towns, $match);
$result = (!empty($match))? $match[0] : "";

print_r($result);   // "Eccleston"

1
2018-06-29 13:14



Angenommen, Sie haben immer $ Towns, die durch "," getrennt sind, dann könnten Sie so etwas tun

$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";    
$TownsArray = explode(", ", $Towns);

    foreach($TownsArray as $Town)
    {
       if(stristr($Find, $Town))
       { 
          echo $Town; break;
       }
    }

Der obige Code gibt die Stadt aus, sobald sie die Nadel gefunden hat und die foreach-Schleife verlässt. Du könntest die "Pause" entfernen; um das Skript weiterlaufen zu lassen, um zu sehen, ob es mehr Ergebnisse findet.


1
2018-06-29 13:21



Verwenden preg_match(), es ist möglich zu suchen Eccle und gib das zurück Eccleston Wort.

Ich benutze den Pearl Compatible Regular Expression (PCRE) '#\w*' . $Find . '\w*#' im Code unten und der Demo Code.

Das # Zeichen sind PCRE-Trennzeichen. Das gesuchte Muster befindet sich innerhalb dieser Begrenzer. Manche Leute bevorzugen / als Begrenzer.
Das \w zeigt an Wort Figuren.
Das * zeigt 0 oder mehr Wiederholungen des vorherigen Zeichens an.
Also, die #\w*Eccle\w*# PCRE sucht nach einer Zeichenfolge mit Eccle umgeben von einem oder mehreren Wort Figuren (Briefe)

<?php
$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

if (preg_match('#\w*' . $Find . '\w*#', $Towns, $matches)) {
    print_r($matches[0]);
}
?>

Laufender Code: http://sandbox.onlinephpfunctions.com/code/4e4026cbbd93deaf8fef0365a7bc6cf6eacc2014

Hinweis: '#\w*' . $Find . '\w*#' ist das gleiche wie "#\w*$Find\w*#" (Beachten Sie die umgebenden einfachen oder doppelten Anführungszeichen). Sehen Dies.


1
2018-06-29 13:13



Du warst fast da ...

Das ist wahrscheinlich das, was Sie suchen:

<?php
$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

if(stripos($Towns, $Find)) {
    echo $Towns;
}

Die Ausgabe ist: Eccleston, Aberdeen, Glasgow was ich "die ganze Saite" nennen würde.


Wenn Sie jedoch nur das teilweise übereinstimmende ausgeben möchten Teil von "der ganzen Schnur", dann sieh dir das Beispiel an:

<?php
$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

foreach (explode(',', $Towns) as $Town) {
    if(stripos($Town, $Find)) {
        echo trim($Town);
    }
}

Die Ausgabe davon ist offensichtlich: Eccleston...

Zwei allgemeine Bemerkungen:

  1. das strpos() / stripos() Funktionen sind hier besser geeignet, da sie nur eine Position anstelle der gesamten übereinstimmenden Zeichenfolge zurückgeben, die für den gegebenen Zweck ausreicht.

  2. die Verwendung von stripos() Anstatt von strpos() führt eine case-insensitive Suche durch, was für die Aufgabe wahrscheinlich sinnvoll ist ...


1
2018-06-29 13:12