Ben sadece PHP belirli bir alt dize sonra her şeyi nasıl kaldırabilirsiniz merak ediyorum
örn:
Posted On April 6th By Some Dude
Ben "By" alt dizesi dahil ve sonra, tüm metni kaldırmasını istiyorum
Teşekkürler
Ben sadece PHP belirli bir alt dize sonra her şeyi nasıl kaldırabilirsiniz merak ediyorum
örn:
Posted On April 6th By Some Dude
Ben "By" alt dizesi dahil ve sonra, tüm metni kaldırmasını istiyorum
Teşekkürler
Yanıtlar:
$variable = substr($variable, 0, strpos($variable, "By"));
Sade ingilizce: Dizenin başında başlayan ve sınırlayıcıyla ilk karşılaştığınız yerde biten kısmını verin.
Eğer sen bayrağı iğne_öncesi $ bakmak 5.3+ PHP kullanıyorsanız ) (strstr
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
FALSEDizenin bir kısmı bulunmazsa döneceğini unutmayın . Yani çözüm şöyle olabilir:echo strstr($s, 'By', true) ?: $s;
explode(' By', $s)[0]IMHO
Kullanmaya ne dersiniz explode:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
Avantajları:
$result[1]dönecektir Some Dude)Bir yöntem şöyle olur:
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
By, ancak 2. parametrede herhangi bir karakterle bölünür . Anlamı, ya tarafından bölecek Bveya y. Teknik olarak, a'dan önce her şeyi almıyor By.
strtok('a:b', ':')döner aama strtok(':b', ':')dönecektir b, beklediğiniz gibi değil boş bir dize.
Bunu dene.
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;
}
}
Kullanımı:
<?php
//returns Apples
$clean_string= strip_after_string ("Apples, Oranges, Banannas",",");
?>
Austin'in cevabı örnek vakanız için işe yarar.
Daha genel olarak, bölündüğünüz alt dize dizeler arasında farklılık gösterebiliyorsa normal ifade işlevlerine bakmak iyi olur :
$ değişken = preg_replace ('/ By. * /', '', $ değişken);
$var = "Posted On April 6th By Some Dude";
$new_var = substr($var, 0, strpos($var, " By"));
preg_replace bir yol sunar:
$newText = preg_replace('/\bBy.*$/', '', $text);
Normal ifadeyi kullanarak: $string = preg_replace('/\s+By.*$/', '', $string)
Aşağıda, bir dizgideki ilk By öğesinden sonra her şeyi kesmek için en verimli yöntem (çalışma zamanına göre) verilmiştir . Eğer By yok, tam dize döndürülür. Sonuç $ sResult olur.
$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"
Büyük / küçük harfe duyarlı olmak istemiyorsanız , strpos yerine stripos kullanın. By öğesinin birden fazla var olabileceğini düşünüyorsanız ve son olaydan sonra her şeyi kesmek istiyorsanız, strrpos kullanın .
Aşağıda daha az verimli bir yöntem olmakla birlikte, daha az kod alanı kaplar. Bu yöntem de daha esnektir ve herhangi bir normal ifade yapmanıza izin verir.
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
Örneğin, günden sonra her şeyi kaldırmak istiyorsanız:
$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"
Büyük / küçük harf duyarlı değilse, i değiştiricisini şu şekilde ekleyin:
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
Geçen geçmiş her şeyi elde etmek By Bir ekstra ekleyin Birden fazla olabileceğini düşünüyorsanız * böyle başında.:
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
Ama burada da yapmaya çalıştığınız şeyi yapmak için preg_match'u kullanabileceğiniz gerçekten güçlü bir yol var:
$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
}
Düzenli ifadeler ilk başta kafa karıştırıcı görünebilir, ancak onlara hakim olduktan sonra gerçekten güçlü ve en iyi arkadaşınız olabilirler! İyi şanslar!
Neden...
Bu, çoğu insanın ihtiyaçları için aşırı derecede doludur, ancak yukarıdaki her bir yanıtın cevaplamadığı bir takım şeyleri ele alır. Ele aldığı öğelerden üçü benim ihtiyaçlarım için gerekliydi. Sıkı basamaklama ve yorumları düşürme ile, bu sadece 13 satır kodda okunabilir kalabilir.
Bu aşağıdakilere yöneliktir:
Kullanımı:
Orijinal dize, arama char / dize, sağ veya sol tarafta başlangıç için "R" / "L", büyük / küçük harf duyarlılığı için true / false. Örneğin, "burada" büyük / küçük harfe duyarlı olmayan, dize halinde sağ tarafı başlatın.
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
Çıktı "Şimdi Burada Bazı Kelimeler" olacaktır. "R" nin "L" olarak değiştirilmesi "Now" sonucunu verir.
İşte işlevi:
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
}
}