提取后面跟有特定字符的所有数字子字符串

问题描述 投票:0回答:8

如果我有一个字符串“123x456x78”,我如何分解它以返回一个包含“123”作为第一个元素和“456”作为第二个元素的数组?基本上,我想采用后面跟着“x”的字符串(这就是为什么“78”应该被丢弃)。我一直在摆弄正则表达式,但遇到了麻烦。

编辑:如果字符串是“123x456x78x”,我需要三个元素:“123”,“456”,“78”。基本上,对于“x”后面的每个区域,我需要记录字符串直到下一个“x”。

php arrays string explode delimiter
8个回答
3
投票

有很多不同的方法,但这里有一个 RegEx,因为你正在尝试:

$str = "123x456x78";
preg_match_all("/(\d+)x/", $str, $matches);
var_dump($matches[1]);

输出:

array(2) { [0]=> string(3) "123" [1]=> string(3) "456" }

2
投票
$arr = explode("x", "123x456x78");

然后

unset($arr[2]);

如果你实在受不了那个可怜的78。


1
投票

使用爆炸

$string='123x456x78';

$res = explode('x', $string);
if(count($res) > 0) {
    echo $res[0];
    if(count($res) > 1) {
        echo $res[1];
    }
}

1
投票
$var = "123x456x78";
$array = explode("x", $var);
array_pop($array);

0
投票

爆炸并删除最后的结果:

$string='123x456x78'; // original string

$res = explode('x', $string); // resulting array, exploded by 'x'

$c = count($res) - 1; // last key #, since array starts at 0 subtract 1

unset($res[$c]); // unset that last value, leaving you with everything else but that.

0
投票

虽然我完全支持正则表达式,但在这种情况下,使用 PHP 的数组函数可能会更容易......

$result=array_slice(explode('x',$yourstring),0,-1);

这应该可行,因为只有explode返回的最后一个元素后面不会跟着'x'。不确定如果以“x”结尾,explode 是否会添加一个空字符串作为最后一个元素,但您可能需要测试一下...


0
投票

使用下面的代码来爆炸。效果很好!

   <?php
    $str='123x456x78';
    $res=explode('x',$str);
    unset($res[count($res)-1]); // remove last array element
    print_r($res);
    ?>

0
投票

您可以通过匹配数字并向前查找

x
来简化输出数组,而不是捕获数字并匹配
x
的模式。

代码:(演示

$string = '123x456x78';

preg_match_all('/\d+(?=x)/', $string, $m);
var_export($m[0] ?? null);
© www.soinside.com 2019 - 2024. All rights reserved.