我在iPhone上输入此内容,因此我很难格式化代码等。
基本上,我有一个文本文件,其内容类似于以下内容:
Mercedes Benz 4726498 on April 23rd 2015 03:02:14 am (1847284839)
Vauxhall Astra 3819482 on April 25th 2015 01:26:34 pm (382838484)
Vauxhall Astra Estate 4728482 (22) on June 22nd 2015 02:48:42 pm (382848388)
基本上,它是一系列的一个或多个单词,一个7位数字,然后是括号之间的数字,日期字符串和末尾括号中的数字
每一行都会有一系列单词,7位数字,日期字符串和最后的数字
第三行括号中的数字在某些行上但不是全部
基本上,我想在PHP中编写一个正则表达式来提取除日期字符串
之外的所有信息我已经尝试了各种各样的试验和错误,并且无法解决问题!
如果有人能帮助我,我将非常感激! : - )
编辑添加评论最佳尝试: 它是这样的:
preg_match('/(^[a-zA-Z\'-]+\s[a-zA-Z\'-]+) ([0-9]+) (([0-9]+))(\s(([0-9]{2}?)))?/', $line, $matches);
谢谢你们! 标记
答案 0 :(得分:2)
你太复杂了。首先,一般来说,没有必要具体说明哪些字符可以作为单词出现。其次,如果您不知道会有多少单词,请不要尝试将它们作为单独的单词匹配。
(\D+)\s+(\d+)\s+(?:\((\d+)\))?.*\((\d+)\)
应该足够了:
如果可能在车名中有数字,那么在定义下一个事物(数字)时你可能需要更精确一些:
(.+)\s+(\d{7})\s+(?:\((\d+)\))?.*\((\d+)\)
答案 1 :(得分:1)
以下似乎有效:
([A-Za-z ]*) ([0-9]{7}) (?:\(([0-9]{2})\) )?on ([A-Za-z0-9: ]*) \(([0-9]*)\)
当应用于示例输入时,我们得到以下数组:
array(6
0 => Mercedes Benz 4726498 on April 23rd 2015 03:02:14 am (1847284839)
1 => Mercedes Benz
2 => 4726498
3 =>
4 => April 23rd 2015 03:02:14 am
5 => 1847284839
)
array(6
0 => Vauxhall Astra Estate 4728482 (22) on June 22nd 2015 02:48:42 pm (382848388)
1 => Vauxhall Astra Estate
2 => 4728482
3 => 22
4 => June 22nd 2015 02:48:42 pm
5 => 382848388
)