我只是想知道如何在PHP中某个子字符串之后删除所有内容
例如:
Posted On April 6th By Some Dude
我想要它,以便它删除包括子字符串“ By”在内的所有文本。
谢谢
我只是想知道如何在PHP中某个子字符串之后删除所有内容
例如:
Posted On April 6th By Some Dude
我想要它,以便它删除包括子字符串“ By”在内的所有文本。
谢谢
Answers:
$variable = substr($variable, 0, strpos($variable, "By"));
用简单的英语来说:给我字符串的一部分,从开始到结束,直到您第一次遇到分支的位置。
如果您使用的是PHP 5.3+,请查看strstr()的$ before_needle标志
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
FALSE
如果找不到字符串的一部分,它将返回。因此,解决方案可能是:echo strstr($s, 'By', true) ?: $s;
explode(' By', $s)[0]
恕我直言
如何使用explode
:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
优点:
$result[1]
中将返回Some Dude
)您可以这样做:
$posted = preg_replace('/ By.*/', '', $posted);
echo $posted;
一种方法是:
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
By
,而是被第二个参数中的任何字符分割。意思是,它将被B
或分割y
。从技术上讲,它不能在之前得到所有东西By
。
strtok('a:b', ':')
将返回,a
但strtok(':b', ':')
将返回b
,而不是您期望的空字符串。
试试这个。
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",",");
?>
奥斯汀的答案适用于您的案例。
更一般而言,当要拆分的子字符串在字符串之间可能不同时,您最好查看正则表达式函数:
$ variable = preg_replace('/ By。* /','',$ variable);
preg_replace
提供一种方法:
$newText = preg_replace('/\bBy.*$/', '', $text);
下面是最有效的方法(按运行时),用于切断字符串中第一个“ 按”之后的所有内容。如果By不存在,则返回完整的字符串。结果在$ 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。
下面是一种效率较低的方法,但是它占用的代码空间更少。此方法也更灵活,可以执行任何正则表达式。
$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}[a-z]{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);
使所有内容都超过最后一个如果您认为可能不止一个,请在开头添加一个额外的。*,如下所示:
$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
}
一开始,正则表达式可能看起来令人困惑,但是一旦掌握了它们,它们就可以真正强大起来,成为您最好的朋友!祝好运!
为什么...
对于大多数人的需求而言,这可能是多余的,但是,它解决了上面每个答案都不能解决的许多问题。在它处理的项目中,我需要其中三个。通过使用尖括号括起来并删除注释,仅需13行代码仍然可以阅读。
这解决了以下问题:
用法:
发送原始字符串,搜索字符/字符串,“ R” /“ L”表示从右侧或左侧开始,true / false表示区分大小写。例如,搜索不区分大小写的“ here”(以字符串开头)。
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
输出将是“现在有一些单词”。将“ R”更改为“ L”将输出:“ Now”。
功能如下:
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
}
}