我有一些数据要从中获取值:
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
的值。请告诉我解决方案的问题。
答案 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+)#'