Php 正则表达式
我刚开始学习正则表达式,我有一个这样的例子 “23.0003NOV14DIX”。我想提取23.00和03NOV14DIX 我试过这个: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
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);