更正我的preg_match功能

时间:2017-01-17 06:26:31

标签: regex preg-match

我有一些数据要从中获取值:

 Mobile:7899886788  bal:0.0    p=1898668

我为此制作了preg_match函数:

preg_match('#Mobile:(.*?)  bal:0.0    p=(.*?)#',$html,$matches);
$a=matches[1];
$a1=$matches[2];

我获得了$a的价值,但未找到$a1的值。请告诉我解决方案的问题。

1 个答案:

答案 0 :(得分:0)

由于*?量词是懒惰的,因此正则表达式中的第二个组将始终匹配空字符串。

如果您在Mobile:p=之后始终拥有数字值,则可以使用简单的数字匹配模式\d+替换所有点延迟匹配模式:

'#Mobile:(\d+)\s+bal:0\.0\s+p=(\d+)#'

请参阅regex demo

请注意,必须转义点以匹配文字点。此外,最好使用匹配任何一个或多个空白字符的\s+模式替换文字空间。

另一种方法是在\S+所需的属性之后捕获任何1+非空白符号:

'#Mobile:(\S+)\s+bal:\S+\s+p=(\S+)#'

请参阅this regex demo