正则表达式匹配和检索分隔数字列表中的值

时间:2014-01-12 05:34:02

标签: php regex separator

有一个带有这些分隔符的数字列表(注意:不包括引号):

"1"
"1$^20"
"23$^100$^250"

我注意写一个正则表达式来匹配数字和分隔符的语法,并且还返回列表中的所有数字,我可以在PHP中获得的最佳尝试是这段代码:

preg_match_all("/(\d+)(?:\\$\\^){0,1}/", $s2, $n);
print_r($n);

但它返回:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 20
        )

    [1] => Array
        (
            [0] => 1
            [1] => 20
        )

)

我需要的是:

Array
(
    [0] => 1
    [1] => 20
)

或至少:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 20
        )
)

2 个答案:

答案 0 :(得分:2)

您可以像这样获取匹配数组中的第一个条目:

$s2 = "1$^20";
preg_match_all("/(\d+)(?:\$\^){0,1}/", $s2, $n);
print_r($n[0]);
// Array ( [0] => 1 [1] => 20 )

或删除该组,只提取如下数字:

$s2 = "1$^20";
preg_match_all("/\d+/", $s2, $n);
print_r($n); 
// Array ( [0] => Array ( [0] => 1 [1] => 20 ) )

另一种选择可能是使用preg_split

$s2 = "1$^20";
$n = preg_split('/\$\^/', $s2);
print_r($n);
// Array ( [0] => 1 [1] => 20 )

答案 1 :(得分:0)

我又想到了这个问题。我知道我不仅需要拆分它们,还要检查值语法。如果它是一个文本分隔列表怎么办? ......嗯...然后在PHP代码中出现了如下智能方式:

// Split and also check value validity of number separated list
$pattern1 = "/(\d+?)\\$\\^/";
$1 = "1^$23";
$s1 .= "$^"; // Always append one separator set
preg_match_all($pattern1, $s1, $matches);

将\ d更改为。也适用于文本分隔列表或数字文本混合分隔列表。