PHP Complex正则表达式

时间:2015-05-20 01:26:49

标签: php regex

我在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);

谢谢你们! 标记

2 个答案:

答案 0 :(得分:2)

你太复杂了。首先,一般来说,没有必要具体说明哪些字符可以作为单词出现。其次,如果您不知道会有多少单词,请不要尝试将它们作为单独的单词匹配。

(\D+)\s+(\d+)\s+(?:\((\d+)\))?.*\((\d+)\)

应该足够了:

  • 一些非数字(捕获为第1组)
  • 一些空格
  • 一些数字(作为第2组捕获)
  • 一些空格
  • 可能是括号,里面有一些数字(将它们捕获为第3组)
  • 东西
  • 括号,里面的一些数字(将它们捕获为第4组)

如果可能在车名中有数字,那么在定义下一个事物(数字)时你可能需要更精确一些:

(.+)\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
)

http://www.phpliveregex.com尝试一下!

相关问题