Php 如何在某个角色之后获得所有内容?

Php 如何在某个角色之后获得所有内容?,php,string,Php,String,我有一个字符串,我想得到某个值之后的所有内容。字符串总是以一组数字开头,然后是下划线。我想得到下划线后面的字符串的其余部分。例如,如果我有以下字符串和我想要返回的内容: "123_String" -> "String" "233718_This_is_a_string" -> "This_is_a_string" "83_Another Example" -> "Another Example" 我怎样才能这样做呢?查找下划线的偏移量,然后substr获取从该索引加1开始的所

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

"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"
我怎样才能这样做呢?

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

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

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

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

以下是使用
分解的方法:

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

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


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


strtok
对于这类事情来说是一个被忽视的功能。这意味着相当快

$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' ); 
这样的空字符串将强制返回字符串的其余部分


注意:如果在“u”之后没有任何内容,您将获得
$allTheRest
FALSE
值,如中所述,必须使用===进行测试,以区别于其他伪值。

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

查询:

$s = "This_is_a_string_233718";

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

$s = "This_is_a_string_233718";

$text = $s."_".substr($s, 0, strrpos($s, "_"));
这是另一种简单的方法,使用或:

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

echo ltrim($str, '0..9_'); // This_is_a_string
但仅当字符串的右侧部分(在u之后)不以数字开头时,否则它也将被修剪

$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"

检查下划线是否存在的最佳方法是什么,例如它是可选的。@JohnMagnolia:然后你可以使用
if(($pos=strpos($data,“”)!==FALSE){$whatIWant=substr($data,$pos+1);}
@JohnMagnolia或者一个有点花哨的一行:
substr($data,(strrpos($data,“?:-1)+-1)
@flu我想你是说的,更难阅读。在我看来,行数越少并不意味着越花哨。如果找不到指针,此函数将在某些子字符串/char后返回字符串或false:
函数StrAfterStr($S,$H){return($P=strps($S,$H))!==false)?子字符串($S,$P+1):false;}
小心:如果strtok是字符串中的第一个字符,则strtok将返回该字符后的字符串部分,例如,
strtok('a_'b','u')
将返回
a
,但
strtok('u'b','u')
将返回
b
,而不是您所期望的空字符串。对于这一评论,我想我不会“期待”一个空字符串,我可能想知道我是否会得到一个空字符串…我的评论是试图说,如果
\uu
是第一个字符,这个答案将中断。如果上述代码中的
$s
“\u此\u为\u字符串”
,则结果将为
为\u字符串
,而不是
此\u为\u字符串
。因此,对于每种情况,它都不是“如何在某个字符之后获取所有内容?”的解决方案。消音器
@
是一种糟糕的编码实践。该错误将被静默,但该错误将继续被记录。您的磁盘将满。$extension=substr(strrchr($string,'.'),1);//返回“jpg”
echo substr(strstr("233718_This_is_a_string", '_'), 1); // "This_is_a_string"
$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns "jpg"