如何获得某个角色后的所有内容?

use*_*676 127 php string

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

"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"
Run Code Online (Sandbox Code Playgroud)

我怎么能做这样的事呢?

dat*_*yss 296

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

$data = "123_String";    
$whatIWant = substr($data, strpos($data, "_") + 1);    
echo $whatIWant;
Run Code Online (Sandbox Code Playgroud)

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

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

  • @JohnMagnolia或者有点花哨的单行:`substr($ data,(strrpos($ data,'_')?: - 1)+1)`. (9认同)
  • 什么是最好的检查是否存在下划线,例如它的可选项. (2认同)
  • @JohnMagnolia:然后你可以使用`if(($ pos = strpos($ data,"_"))!== FALSE){$ whatIWant = substr($ data,$ pos + 1); }` (2认同)
  • @flu我想你想说,更难读.国际海事组织,减少线路并不意味着发烧友. (2认同)

mik*_*ent 13

strtok这种事情是一个被忽视的功能.这意味着要快得多.

$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' ); 
Run Code Online (Sandbox Code Playgroud)

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

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

  • 注意:如果它是字符串中的第一个字符,strtok 将返回字符串 *after* 的部分,例如,`strtok('a_b', '_')` 将返回 `a` 但`strtok(' _b', '_')` 将返回 `b`,而不是您期望的空字符串 (3认同)
  • 在很多方面,这是**最佳**答案! (2认同)

Pin*_*ana 12

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

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns ".jpg"
Run Code Online (Sandbox Code Playgroud)

  • $extension = substr(strrchr($string, '.'), 1); // 返回“jpg” (13认同)

ken*_*orb 8

这是使用方法explode:

$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string
Run Code Online (Sandbox Code Playgroud)

要么:

$text = @end((explode('_', '233718_This_is_a_string', 2)));
Run Code Online (Sandbox Code Playgroud)

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


这是另一个使用strpos单线程(如@flu所建议的):

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


ngg*_*git 5

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

$str = '233718_This_is_a_string';

echo ltrim(strstr($str, '_'), '_'); // This_is_a_string
Run Code Online (Sandbox Code Playgroud)

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

echo ltrim($str, '0..9_'); // This_is_a_string
Run Code Online (Sandbox Code Playgroud)

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