174

我有一个字符串,我想在某个值之后得到所有东西。字符串总是以一组数字开始,然后是一个下划线。我想在下划线之后得到字符串的其余部分。因此,例如,如果我有以下字符串以及我想要返回的内容:

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

我该怎么做这样的事情?

4

9 回答 9

400

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

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

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

if (($pos = strpos($data, "_")) !== FALSE) { 
    $whatIWant = substr($data, $pos+1); 
}
于 2012-07-10T01:38:39.883 回答
31

strtok是这类事情的一个被忽视的功能。这意味着非常快。

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

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

请注意,如果在“_”之后什么都没有,您将获得一个FALSE$allTheRest,如文档中所述,必须使用 === 对其进行测试,以区别于其他虚假值。

于 2017-11-24T08:11:21.487 回答
14

这是使用的方法explode

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

或者:

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

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


这是另一种使用方式strpos(如@flu建议的那样):

$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string
于 2017-07-23T14:56:46.237 回答
5

另一种简单的方法,使用strchr()strstr()

$str = '233718_This_is_a_string';

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

在您的情况下,仅 ltrim() 就足够了:

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

但前提是字符串的右边部分(_之后)不以数字开头,否则也会被修剪。

于 2018-12-08T00:44:53.037 回答
5

我使用 strrchr()。例如,要查找文件的扩展名,我使用此函数:

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns "jpg"
于 2020-07-23T13:03:52.907 回答
3

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

询问:

$s = "This_is_a_string_233718";

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

输出:

this_is_a_string

于 2018-02-27T09:54:15.360 回答
1
$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"
于 2019-10-19T21:25:05.277 回答
0

如果您想在某些字符之后获取所有内容,并且这些字符位于字符串的开头,则可以使用如下更简单的解决方案:

$value = substr( '123_String', strlen( '123_' ) );
echo $value; // String
于 2021-10-04T02:54:31.487 回答
0

使用此行返回符号后的字符串,如果字符不出现,则返回原始字符串:

$newString = substr($string, (strrpos($string, '_') ?: -1) +1);
于 2021-12-24T11:20:32.587 回答