在下划线之前获取字符串中的所有内容的PHP方法

8

我有这段代码:

$imagePreFix = substr($fileinfo['basename'], 0, strpos($fileinfo['basename'], "_"));

这会让我得到下划线之前的所有字符,如果想得到下划线后面的所有字符,可以使用上一个代码。

$fileinfo['basename'] 等于 'feature_00'

谢谢


第一个下划线之后呢?如果有多个下划线呢? - Ray
4个回答

22

您应该简单地使用:

$imagePreFix = substr($fileinfo['basename'], 0, strpos($fileinfo['basename'], "_"));

我不认为有任何理由使用explode并创建额外的数组来获取第一个元素。

您也可以使用(在PHP 5.3+中):

$imagePreFix = strstr($fileinfo['basename'], '_', true); 

3

如果你完全确定至少会有一个下划线,并且你对第一个下划线感兴趣:

$str = $fileinfo['basename'];

$tmp = explode('_', $str);

$res = $tmp[0];

另一种做法:

$str = "this_is_many_underscores_example";

$matches = array();

preg_match('/^[a-zA-Z0-9]+/', $str, $matches);

print_r($matches[0]); //will produce "this"

(可能需要调整正则表达式模式,但就本例而言,它可以正常工作。)


2

我认为最简单的方法是使用 explode

$arr = explode('_', $fileinfo['basename']);
echo $arr[0];

这将把字符串分割成一个子字符串的数组。数组的长度取决于有多少个_实例。例如
"one_two_three"

会被分解成一个数组

["one", "two", "three"] 

这里是一些文档


1
如果你想要一个老派的回答,就像你提出的那样,你仍然可以执行以下操作: $imagePreFix = substr($fileinfo['basename'], 0, strpos($fileinfo['basename'], "_"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接