我有一个字符串,我想在某个值之后得到所有东西。字符串总是以一组数字开始,然后是一个下划线。我想在下划线之后得到字符串的其余部分。因此,例如,如果我有以下字符串以及我想要返回的内容:
"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"
我该怎么做这样的事情?
找到下划线的strpos()
偏移量,然后 substr 获取从该索引加 1 开始的所有内容。
$data = "123_String";
$whatIWant = substr($data, strpos($data, "_") + 1);
echo $whatIWant;
如果您还想_
在尝试获取字符串之前检查下划线字符 ( ) 是否存在,您可以使用以下命令:
if (($pos = strpos($data, "_")) !== FALSE) {
$whatIWant = substr($data, $pos+1);
}
strtok
是这类事情的一个被忽视的功能。这意味着非常快。
$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' );
像这样的空字符串将强制返回字符串的其余部分。
请注意,如果在“_”之后什么都没有,您将获得一个FALSE
值$allTheRest
,如文档中所述,必须使用 === 对其进行测试,以区别于其他虚假值。
这是使用的方法explode
:
$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string
或者:
$text = end((explode('_', '233718_This_is_a_string', 2)));
通过指定2
inlimit
参数explode()
,它返回由字符串分隔符分隔的最多 2 个元素的数组。返回第二个元素 ( [1]
),将给出字符串的其余部分。
这是另一种使用方式strpos
(如@flu建议的那样):
$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string
我使用 strrchr()。例如,要查找文件的扩展名,我使用此函数:
$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns "jpg"
如果有人需要提取字符串的第一部分,那么可以尝试,
询问:
$s = "This_is_a_string_233718";
$text = $s."_".substr($s, 0, strrpos($s, "_"));
输出:
this_is_a_string
$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"
如果您想在某些字符之后获取所有内容,并且这些字符位于字符串的开头,则可以使用如下更简单的解决方案:
$value = substr( '123_String', strlen( '123_' ) );
echo $value; // String
使用此行返回符号后的字符串,如果字符不出现,则返回原始字符串:
$newString = substr($string, (strrpos($string, '_') ?: -1) +1);