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

时间:2014-07-09 18:39:45

标签: php string substr strpos

我这里有这个代码:

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

这让我得到了下划线之后的所有内容,但我希望在下划线之前获取所有内容,我如何调整此代码以获得下划线之前的所有内容?

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

由于

4 个答案:

答案 0 :(得分:10)

你应该简单使用:

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

我没有看到任何理由使用explode并创建额外的数组只是为了获得第一个元素。

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

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

答案 1 :(得分: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"

(可能regexp模式需要调整,但为了这个例子的目的,它可以正常工作)。

答案 2 :(得分:2)

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

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

这会将字符串拆分为子字符串数组。数组的长度取决于_的实例数。例如

"one_two_three"

会被分成一个数组

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

这是some documentation

答案 3 :(得分:1)

如果你想要一个你所建议类型的老派答案,你仍然可以做到以下几点:

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