我的字符串如下所示:
Response: 311768560
311768562
311768564
我试过了:
$success_pattern="Response: ((\d+)[\n])*";
$response="Response: 311768560\n311768562\n311768564\n311768566";
preg_match("/$success_pattern/i", $response, $match);
输出:
Array (
[0] => Response: 311768560 311768562 311768564
[1] => 311768564
[2] => 311768564
)
我需要一个包含所有数字的数组作为输出,如:
array('311768560','311768562','311768564');
答案 0 :(得分:0)
<?php
$string="Response: 311768560 311768562 311768564";
preg_match_all("/[\d]+/", $string, $matches);
print_r($matches);
<强>输出:强>
Array
(
[0] => Array
(
[0] => 311768560
[1] => 311768562
[2] => 311768564
)
)
答案 1 :(得分:0)
尽量不要对preg_match()
等特定功能过于依赖。 PHP提供了几种生成所需输出的方法。我将向您展示三种不同的方法:
<强>输入强>:
$response="Response: 311768560
311768562
311768564";
方法#1 :explode()
substr()
和strpos()
(Demo)
$array=explode("\r\n",substr($response,strpos($response,' ')+1));
*请注意,此方法假定第一个字符串(Response
)是唯一不需要的子字符串,并且它始终是第一个。此外,根据您的编码环境,可能不需要\r
。这可能是我的方法列表中最快的,因为它不使用正则表达式,但它确实需要3个函数调用和一个增量 - 更不用说它可能对你的实际用例来说太字面了。
方法#2 :preg_match_all()
(Demo)
$array=preg_match_all('/\d+/',$response,$out)?$out[0]:[];
此方法非常直接,快速,并且只需要最少的代码。如果存在任何缺点,则preg_match_all()
返回true | false结果并以多维数组的形式生成输出变量。要修改此输出以满足您的一维要求,我会在函数末尾放置一个内联条件,将所需数据传递给$array
。
方法#3 :preg_split()
(Demo)
$array=preg_split('/[^\d]+/',$response,null,PREG_SPLIT_NO_EMPTY);
此函数的行为与explode()
类似,只不过它具有正则表达式的强大功能。该模式标识所有非数字子串并将它们用作“分隔符”并在每个子串上拆分字符串。对于您的输入,第一个分隔符是“Response:”,然后是“311768560”和“311768562”之后的换行符。 preg_split()
的美妙之处在于它直接提供了您正在寻找的一维数组。
<强>输出强>:
无论您尝试使用上述哪种方法,都会收到相同的正确输出:$array=array('311768560','311768562','311768564');
如果这些方法中的任何一种方法都失败了您的实际用例,那么您的$response
字符串可能与您在此处发布的示例数据有太大不同。
答案 2 :(得分:-1)
使用Array_shift()函数
<?php
$str = "Response: 311768560 311768562 311768564";
$s = explode(" ",$str);
$p = array_shift($s);
print_r($s);
?>
输出
Array (
[0] => 311768560
[1] => 311768562
[2] => 311768564 )