我只是想知道如何在PHP中的某个子字符串后删除所有内容
例如:
Posted On April 6th By Some Dude
我想拥有它以便删除所有文本,包括和之后的子字符串“By”
由于
答案 0 :(得分:236)
$variable = substr($variable, 0, strpos($variable, "By"));
用简单的英语:从头开始,到你第一次遇到分隔符的位置,给我一部分字符串。
答案 1 :(得分:89)
如果你正在使用PHP 5.3+,请查看strstr()的$ before_needle标志
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
答案 2 :(得分:24)
如何使用explode
:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
优点:
$result[1]
将返回Some Dude
)答案 3 :(得分:17)
你可以这样做:
$posted = preg_replace('/ By.*/', '', $posted);
echo $posted;
答案 4 :(得分:7)
一种方法是:
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
答案 5 :(得分:5)
奥斯汀的回答适用于你的案例。
更一般地说,当您拆分的子字符串在字符串之间可能不同时,您最好查看regular expression functions:
$variable = preg_replace('/By.*/', '', $variable);
答案 6 :(得分:5)
试试这个。
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",",");
?>
答案 7 :(得分:3)
$var = "Posted On April 6th By Some Dude";
$new_var = substr($var, 0, strpos($var, " By"));
答案 8 :(得分:2)
preg_replace
提供了一种方式:
$newText = preg_replace('/\bBy.*$/', '', $text);
答案 9 :(得分:2)
使用正则表达式:$string = preg_replace('/\s+By.*$/', '', $string)
答案 10 :(得分:2)
list($result) = explode("By", "Posted On April 6th By Some Dude", 2);
// $result is "Posted On April 6th "
答案 11 :(得分:2)
以下是在字符串中第一个 By 之后切断所有内容的最有效方法(按运行时)。如果 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);
如果您认为可能有多个 By ,那么要在最后添加一个。*,如下所示:
$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
}
正则表达式起初可能看起来令人困惑,但是一旦你掌握它们,它们就会非常强大并成为你最好的朋友!祝你好运!
答案 12 :(得分:0)
使用strstr功能。
Error in as.POSIXlt.default(x, tz = tz(x)) :
do not know how to convert 'x' to class “POSIXlt”
第三个参数<?php
$myString = "Posted On April 6th By Some Dude";
$result = strstr($myString, 'By', true);
echo $result ;
告诉函数在第一次出现第二个参数之前返回所有内容。
答案 13 :(得分:0)
为什么...
这可能满足大多数人的需求,但是,它解决了上面每个答案都不能解决的许多问题。在它处理的项目中,我需要其中三个。通过用尖括号括起来并删除注释,仅需13行代码,仍可以保持可读性。
这解决了以下问题:
用法:
发送原始字符串,搜索字符/字符串,“ R” /“ L”表示在左侧或右侧开始,true / false表示区分大小写。例如,搜索不区分大小写的“ here”(字符串),从右开始。
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
输出将为“ Now Here Are Some Words”。将“ 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
}
}
答案 14 :(得分:0)
嘿,我认为这对于想要替换字符位于“By”之后的人可能很有用,例如在他给出的文本中 20 号 > 他的字符串的位置,所以如果你想忽略 by 你应该 add + 2 到位置然后这将忽略第 20 个位置,它会在到达后替换所有如果您提供要替换的文本的确切字符长度,它将起作用。
$variable = substr($variable, 0, strpos($variable, "By") + 2 );
答案 15 :(得分:-1)
$variable = substr($initial, 0, strpos($initial, "By"));
if (!empty($variable)) { echo $variable; } else { echo $initial; }