Php 正则表达式

Php 正则表达式,php,regex,Php,Regex,我刚开始学习正则表达式,我有一个这样的例子 “23.0003NOV14DIX”。我想提取23.00和03NOV14DIX 我试过这个: preg_match("/(?P<a>[0-9]\.[0-9]{2}+)\s+" ."(?P<supplierPrice>)[^\s]\s+/" , $line, $matches); preg\u match(“/(?P[0-9]\.[0-9]{2}+)\s+” .“(?P)[^\s

我刚开始学习正则表达式,我有一个这样的例子 “23.0003NOV14DIX”。我想提取23.00和03NOV14DIX

我试过这个:

       preg_match("/(?P<a>[0-9]\.[0-9]{2}+)\s+"
           ."(?P<supplierPrice>)[^\s]\s+/"

       , $line, $matches);
preg\u match(“/(?P[0-9]\.[0-9]{2}+)\s+”
.“(?P)[^\s]\s+/”
,$line,$matches);

但它不起作用。我的想法是提取数字,直到遇到字符“.”,然后再提取另外两个数字,剩下的部分

您可以使用这个正则表达式:

^(?P<a>\d+\.\d{2})(?P<supplierPrice>.+)$

^(?P

您的正则表达式语法不正确,在初始化字符类后缺少一个量词。在本例中,它只允许“一”个数字。其次,您尝试使用串联运算符(

')。
)将两个命名组连接在一起。另外,最后一个命名组不匹配任何内容

以下内容应该适合您

preg_match('/(?P<a>[0-9]+\.[0-9]{2})(?P<supplierPrice>\S+)/', $line, $matches);
preg\u match('/(?P[0-9]+\.[0-9]{2})(?P\S+/”,$line,$matches);

在您的情况下,它不匹配,因为您只允许点前有一位数字

[0-9]\.
应该使用

[0-9]+\.
如果你想在点之前加上任何数字,那么你应该把其他的数字与

.*
然后结果应该是

preg_match("/(?P<a>[0-9]+\.[0-9]{2})(?P<supplierPrice>.*)/", $line, $matches);
preg\u match(“/(?P[0-9]+\.[0-9]{2})(?P.*)/”,$line,$matches);
或使用\d而不是[0-9]

preg_match("/(?P<a>\d+\.\d{2})(?P<supplierPrice>.*)/", $line, $matches);
preg\u match(“/(?P\d+\.\d{2})(?P.*)/”,$line,$matches);
以下工作


\s*(?p

你看过PHP文档中的
preg\u match
了吗?非常感谢,现在我明白了。
preg_match("/(?P<a>\d+\.\d{2})(?P<supplierPrice>.*)/", $line, $matches);