有一个带有这些分隔符的数字列表(注意:不包括引号):
"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
)
)
答案 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更改为。也适用于文本分隔列表或数字文本混合分隔列表。