删除特定字符后的string部分
我只是想知道如何删除PHP中的某个子string后的所有内容
例如:
Posted On April 6th By Some Dude
我想这样做,它将删除所有的文本,包括之后,子string“By”
谢谢
$variable = substr($variable, 0, strpos($variable, "By"));
用简单的英语:给我的string的一部分开始在开始和结束在你第一次遇到拆分器的位置。
如果您使用PHP 5.3+,请查看strstr()的$ before_needle标志
$s = 'Posted On April 6th By Some Dude'; echo strstr($s, 'By', true);
如何使用explode
:
$input = 'Posted On April 6th By Some Dude'; $result = explode(' By',$input); return $result[0];
优点:
- 非常可读/可理解
- 如果分隔符string(本例中为“By”)不存在,则返回完整的string。 (不会像其他答案一样返回FALSE。)
- 不需要任何正则expression式。
- “正则expression式就像一种特别辛辣的辣酱 – 只有在适当的时候,才能适度地使用和保持克制。”
- 正则expression式比爆炸慢 (我认为preg_split是速度相似的其他答案中build议的其他正则expression式选项)
- 如果需要的话,也可以使string的第二部分可用(
$result[1]
在本例中将返回Some Dude
)
你可以这样做:
$posted = preg_replace('/ By.*/', '', $posted); echo $posted;
奥斯汀的答案适用于你的例子。
更一般的情况是,当你正在分裂的子string在string之间可能会有所不同的时候,你应该好好研究一下正则expression式函数 :
$ variable = preg_replace('/ By。* /','',$ variable);
一种方法是:
$str = 'Posted On April 6th By Some Dude'; echo strtok($str, 'By'); // Posted On April 6th
尝试这个。
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; } }
用法:
<?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"));
通过使用正则expression式: $string = preg_replace('/\s+By.*$/', '', $string)
preg_replace
提供了一种方法:
$newText = preg_replace('/\bBy.*$/', '', $text);
您可以使用list
和explode
function:
list($result) = explode("By", "Posted On April 6th By Some Dude", 2); // $result is "Posted On April 6th "
使用strstr函数。
<?php $myString = "Posted On April 6th By Some Dude"; $result = strstr($myString, 'By', true); echo $result ;
第三个参数true
告诉函数在第一个参数出现之前返回所有的东西。
下面是最有效的方法(通过运行时)来切断第一个By后的所有内容。 如果By不存在,则返回完整的string。 结果是$ 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"
如果您不想区分大小写,请使用stripos而不是strpos。 如果您认为By可能存在多次,并希望在最后一次出现之后切断所有内容,请使用strrpos 。
下面是一个效率较低的方法,但占用较less的代码空间。 这个方法也比较灵活,可以让你做任何正则expression式。
$sInputString = "Posted On April 6th By Some Dude"; $pControl = "By"; $sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString); //$sResult = "Posted On April 6th"
例如,如果您想在一天之后删除所有内容:
$sInputString = "Posted On April 6th By Some Dude"; $pControl = "[0-9]{1,2}[az]{2}"; //1 or 2 numbers followed by 2 lowercase letters. $sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString); //$sResult = "Posted On April"
对于不区分大小写,像这样添加i修饰符:
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
如果你认为可能有不止一个,在开始时join一个额外的*。
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
但是,这里也是一个非常强大的方法,你可以使用preg_match来做你可能要做的事情:
$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 }
正则expression式起初可能看起来很混乱,但是一旦掌握了它们,它们可以变得非常强大,而且是最好的朋友! 祝你好运!