如何得到一个特定的字符后的一切?

我得到了一个字符串,我希望得到一个特定值之后的所有值。字符串总是以一组数字和一个下划线开始。我希望在下划线之后得到字符串的其余部分。例如,如果我有下面的字符串,并且我想要返回:

"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"

我怎么能做这样的事呢?

358118 次浏览

strpos()查找下划线的偏移量,然后 subr 从该索引加1开始获取所有内容。

$data = "123_String";
$whatIWant = substr($data, strpos($data, "_") + 1);
echo $whatIWant;

如果还想在尝试获取字符串之前检查下划线字符(_)是否存在,可以使用以下方法:

if (($pos = strpos($data, "_")) !== FALSE) {
$whatIWant = substr($data, $pos+1);
}

下面是使用 explode的方法:

$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string

或:

$text = end((explode('_', '233718_This_is_a_string', 2)));

通过为 explode()中的 limit参数指定 2,它返回一个由字符串分隔符分隔的最大2个元素的数组。返回第二个元素([1]) ,将给出字符串的其余部分。


下面是使用 strpos的另一个一行程序(如 @ influenza所建议的) :

$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string

strtok对于这类事情来说是一个被忽视的函数,它意味着相当快。

$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' );

像这样的空字符串将强制返回字符串的其余部分。

如果在“ _”之后没有任何值,那么就会得到 $allTheRestFALSE值,如 文件中所述,必须用 = = = 进行测试,以区别于其他虚假值。

如果有人需要提取字符串的第一部分,那么可以尝试,

质疑:

$s = "This_is_a_string_233718";


$text = $s."_".substr($s, 0, strrpos($s, "_"));

产出:

This _ is _ a _ string

另一种简单的方法,使用 Strchr ()Strstr ():

$str = '233718_This_is_a_string';


echo ltrim(strstr($str, '_'), '_'); // This_is_a_string

在你的情况下,也许单独使用 lrim ()就足够了:

echo ltrim($str, '0..9_'); // This_is_a_string

但是只有当字符串(after _)的右边部分没有以数字开头时,否则它也会被修剪。

$string = "233718_This_is_a_string";
$withCharacter = strstr($string, '_'); // "_This_is_a_string"
echo substr($withCharacter, 1); // "This_is_a_string"

在一个单一的声明中,它将是。

echo substr(strstr("233718_This_is_a_string", '_'), 1); // "This_is_a_string"

我使用 strrchr ():

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns "jpg"

如果你想得到特定字符后面的所有内容,并且这些字符位于字符串的开头,你可以使用这样一个简单的解决方案:

$value = substr( '123_String', strlen( '123_' ) );
echo $value; // String

使用此行返回符号后面的字符串,或者如果没有出现该字符,则返回原始字符串:

$newString = substr($string, (strrpos($string, '_') ?: -1) +1);