Je me demande simplement comment je pourrais tout supprimer après une certaine sous-chaîne en PHP
ex:
Posted On April 6th By Some Dude
Je voudrais l'avoir pour qu'il supprime tout le texte, y compris, et après, la sous chaîne "By"
Merci
$variable = substr($variable, 0, strpos($variable, "By"));
En clair: Donne-moi la partie de la chaîne qui commence au début et se termine à la position où tu as rencontré le déliminateur pour la première fois.
Si vous utilisez PHP 5.3+, regardez l'indicateur $ before_needle de strstr ()
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
Que diriez-vous d'utiliser explode
:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
Avantages:
$result[1]
renverrait Some Dude
dans cet exemple)Vous pourriez faire:
$posted = preg_replace('/ By.*/', '', $posted);
echo $posted;
Une méthode serait:
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
La réponse d'Austin fonctionne pour votre cas d'exemple.
Plus généralement, vous feriez bien d'examiner les fonctions d'expression régulières lorsque la sous-chaîne sur laquelle vous divisez peut varier d'une chaîne à l'autre:
$ variable = preg_replace ('/ By. * /', '', $ variable);
Essaye ça.
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;
}
}
Usage:
<?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
offre un moyen:
$newText = preg_replace('/\bBy.*$/', '', $text);
Vous trouverez ci-dessous la méthode la plus efficace (par exécution) pour tout couper après le premier By dans une chaîne. Si By n'existe pas, la chaîne complète est renvoyée. Le résultat est dans $ 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"
Si vous ne souhaitez pas être sensible à la casse, utilisez stripos au lieu de strpos. Si vous pensez que By peut exister plusieurs fois et que vous souhaitez tout supprimer après la dernière occurrence, utilisez strrpos .
La méthode ci-dessous est moins efficace, mais elle prend moins d’espace de code. Cette méthode est également plus flexible et vous permet de faire n’importe quelle expression régulière.
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
Par exemple, si vous voulez tout supprimer après la journée:
$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"
Pour la casse, ajoutez le modificateur i comme ceci:
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
Pour que tout passe au-delà du dernier By si vous pensez qu'il pourrait y en avoir plus d'un, ajoutez un extra. * Au début, comme ceci:
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
Mais voici aussi un moyen très puissant d’utiliser preg_match pour faire ce que vous essayez peut-être de faire:
$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
}
Les expressions régulières peuvent sembler déroutantes au début, mais elles peuvent être très puissantes et devenir votre meilleur ami une fois que vous les maîtrisez! Bonne chance!
En utilisant une expression régulière: $string = preg_replace('/\s+By.*$/', '', $string)
Utilisez la fonction strstr .
<?php
$myString = "Posted On April 6th By Some Dude";
$result = strstr($myString, 'By', true);
echo $result ;
Le troisième paramètre true
indique à la fonction de tout renvoyer avant la première occurrence du deuxième paramètre.
Pourquoi...
Ceci est probablement excessif pour les besoins de la plupart des gens, mais, il aborde un certain nombre de choses que chaque personne ne répond pas ci-dessus. Parmi les articles qu’il adresse, trois d’entre eux étaient nécessaires à mes besoins. Si les commentaires sont crochus et serrés, cela pourrait rester lisible avec seulement 13 lignes de code.
Cela concerne:
Utilisation:
Envoie la chaîne originale, recherche caractère/chaîne, "R"/"L" pour commencer du côté droit ou gauche, vrai/faux pour la sensibilité à la casse. Par exemple, recherchez "ici" sans tenir compte de la casse, dans la chaîne, commencez du côté droit.
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
La sortie serait "Maintenant, voici quelques mots". Changer le "R" en "L" donnerait: "Maintenant".
Voici la fonction:
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
}
}