如何获得某个角色后的一切?


140

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

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

我该如何做这样的事情?

Answers:


333

strpos()发现偏移下划线,那么SUBSTR抓住一切事情,从指数加1日起实施。

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

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

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

2
最好检查下划线是否存在,例如下划线是否存在。
John Magnolia

2
@JohnMagnolia:那么您可以使用if (($pos = strpos($data, "_")) !== FALSE) { $whatIWant = substr($data, $pos+1); }
Amal Murali

11
@JohnMagnolia或有点花哨的单线:substr($data, (strrpos($data, '_') ?: -1) +1)
2015年

2
@flu我想你想说的很难读。海事组织,更少的台词并不意味着更好。
MH

此函数将在某些子字符串/字符之后返回字符串,如果找不到针则返回false:function StrAfterStr($S, $H) { return (($P = strpos($S, $H)) !== false) ? substr($S, $P + 1) : false; }
Marcodor

14

strtok是这种事情的一个被忽视的功能。它的意思是相当快。

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

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

注意:如果'_'之后没有任何内容,您将得到一个FALSE$allTheRest,如文档中所述,必须使用===对其进行测试,以区别于其他虚假值。


3
注意:如果strtok是字符串中的第一个字符,则strtok将返回字符串的部分,例如,strtok('a_b', '_')将返回astrtok('_b', '_')将返回b,而不是您期望的空字符串
Quinn Comendant

9

这是使用方法explode

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

要么:

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

通过指定2limit在参数explode(),则返回用2层由字符串分隔符分隔最大的元件阵列。返回第二个元素([1]),将给出其余的字符串。


这是通过使用另一种方法strpos(如@flu所建议):

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

2

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

查询:

$s = "This_is_a_string_233718";

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

输出:

this_is_a_string



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"

0

我使用strrchr()。例如,要查找文件的扩展名,我可以使用以下功能:

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns ".jpg"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.