Ich frage mich nur, wie ich nach einem bestimmten Teilstring in PHP alles entfernen könnte
ex:
Posted On April 6th By Some Dude
Ich möchte es so haben, dass es den gesamten Text entfernt, einschließlich und nach der Unterzeichenfolge "By".
Vielen Dank
$variable = substr($variable, 0, strpos($variable, "By"));
Im Klartext: Geben Sie mir den Teil der Zeichenfolge, der am Anfang beginnt und an der Stelle endet, an der Sie zuerst auf den Deliminator treffen.
Wenn Sie verwenden, verwenden Sie PHP 5.3+ und sehen Sie sich das Flag $ before_needle von strstr ()
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
Wie wäre es mit explode
:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
Vorteile:
$result[1]
würde in diesem Beispiel Some Dude
zurückgeben)Du könntest es tun:
$posted = preg_replace('/ By.*/', '', $posted);
echo $posted;
Eine Methode wäre:
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
Die Antwort von Austin funktioniert für Ihren Beispielfall.
Im Allgemeinen sollten Sie sich die regulären Ausdrucksfunktionen genauer ansehen, wenn sich die Teilzeichenfolge, in der Sie die Teilung ausführen, zwischen den Zeichenfolgen unterscheiden kann:
$ variable = preg_replace ('/ By. * /', '', $ variable);
Versuche dies.
function strip_after_string($str,$char)
{
$pos=strpos($str,$char);
if ($pos!==false)
{
//$char was found, so return everything up to it.
return substr($str,0,$pos);
}
else
{
//this will return the original string if $char is not found. if you wish to return a blank string when not found, just change $str to ''
return $str;
}
}
Verwendungszweck:
<?php
//returns Apples
$clean_string= strip_after_string ("Apples, Oranges, Banannas",",");
?>
$var = "Posted On April 6th By Some Dude";
$new_var = substr($var, 0, strpos($var, " By"));
preg_replace
bietet eine Möglichkeit:
$newText = preg_replace('/\bBy.*$/', '', $text);
Unten ist die effizienteste Methode (nach Laufzeit), um alles nach dem ersten By in einer Zeichenfolge abzuschneiden. Wenn By nicht vorhanden ist, wird die vollständige Zeichenfolge zurückgegeben. Das Ergebnis ist in $ sResult.
$sInputString = "Posted On April 6th By Some Dude";
$sControl = "By";
//Get Position Of 'By'
$iPosition = strpos($sInputString, " ".$sControl);
if ($iPosition !== false)
//Cut Off If String Exists
$sResult = substr($sInputString, 0, $iPosition);
else
//Deal With String Not Found
$sResult = $sInputString;
//$sResult = "Posted On April 6th"
Wenn Sie nicht zwischen Groß- und Kleinschreibung unterscheiden möchten, verwenden Sie stripos anstelle von strpos. Wenn Sie denken, dass By mehr als einmal existieren könnte und nach dem letzten Vorkommen alles schneiden möchte, verwenden Sie strrpos .
Im Folgenden finden Sie eine weniger effiziente Methode, die jedoch weniger Code-Speicherplatz beansprucht. Diese Methode ist auch flexibler und ermöglicht es Ihnen, jeden regulären Ausdruck auszuführen.
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
Wenn Sie beispielsweise nach dem Tag alles entfernen möchten:
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "[0-9]{1,2}[a-z]{2}"; //1 or 2 numbers followed by 2 lowercase letters.
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April"
Wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen, fügen Sie den i-Modifikator wie folgt hinzu:
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
Um alles nach dem letzten By zu bekommen, wenn Sie der Meinung sind, dass es mehr als einen gibt, fügen Sie am Anfang ein zusätzliches. * Hinzu:
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
Mit preg_match können Sie jedoch auch eine wirklich mächtige Methode einsetzen, um das zu tun, was Sie möglicherweise versuchen:
$sInputString = "Posted On April 6th By Some Dude";
$pPattern = "'Posted On (.*?) By (.*?)'s";
if (preg_match($pPattern, $sInputString, $aMatch)) {
//Deal With Match
//$aMatch[1] = "April 6th"
//$aMatch[2] = "Some Dude"
} else {
//No Match Found
}
Reguläre Ausdrücke mögen auf den ersten Blick verwirrend wirken, aber sie können wirklich mächtig und Ihr bester Freund sein, wenn Sie sie beherrschen! Viel Glück!
Verwenden Sie einen regulären Ausdruck: $string = preg_replace('/\s+By.*$/', '', $string)
Verwenden Sie die Funktion strstr .
<?php
$myString = "Posted On April 6th By Some Dude";
$result = strstr($myString, 'By', true);
echo $result ;
Der dritte Parameter true
teilt der Funktion mit, alles vor dem ersten Auftreten des zweiten Parameters zurückzugeben.
Warum...
Dies ist wahrscheinlich zu viel für die Bedürfnisse der meisten Menschen, aber es spricht eine Reihe von Dingen an, die jede einzelne Antwort oben nicht tut. Von den Gegenständen, die es anspricht, wurden drei für meine Bedürfnisse benötigt. Mit einer engen Klammer und dem Löschen der Kommentare könnte dies bei nur 13 Codezeilen noch lesbar bleiben.
Dies befasst sich mit den folgenden:
Verwendungszweck:
Original-String senden, Zeichen/String suchen, "R"/"L" für Start rechts oder links, wahr/falsch für Groß-/Kleinschreibung. Suchen Sie zum Beispiel nach "hier" ohne Berücksichtigung der Groß-/Kleinschreibung. Beginnen Sie in der Zeichenfolge mit der rechten Seite.
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
Die Ausgabe wäre "Jetzt sind hier einige Wörter". Wenn Sie das "R" in ein "L" ändern, wird "Now" ausgegeben.
Hier ist die Funktion:
function TruncStringAfterString($origString,$truncChar,$startSide,$caseSensitive)
{
if ($caseSensitive==true && strstr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strrpos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return strstr($origString,$truncChar,true);
}
}
elseif ($caseSensitive==false && stristr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strripos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return stristr($origString,$truncChar,true);
}
}
else
{ // NOT found - return origString untouched
return $origString; // Nothing to do here
}
}