要求必须存在正则表达式范围的一部分,而其他则是可选的

时间:2018-09-07 13:25:39

标签: php regex

我有这样的数据:

01Jun18 324567645
01Jun18 Addfd
01Jun18 112 Word
01Jun18 fjfs7dfsfj
01Jun18 kdkd
01Jun18 0sdfnefk
01Jun18 skfks7sfsff
01Jun18 sfrfsf8srfsr

我希望除第一行外的所有行都匹配。字符串可以包含数字,但不能仅包含数字-必须也存在字母。

到目前为止,我正在使用,但这与所有行匹配:

([\d]{2}[A-Za-z]{3}[\d]{2}) ([A-Za-z\d ]{1,})

关于如何或是否可以实现的任何想法?我已尝试使用+将A-Z标记为必需

2 个答案:

答案 0 :(得分:1)

^([\d]{2}[A-Za-z]{3}[\d]{2}) [0-9 ]*[a-zA-Z]+[0-9a-zA-Z ]*$

答案 1 :(得分:0)

您可以使用

preg_match_all('~^(\d{2}[A-Za-z]{3}\d{2})\h+(?!\d+$)([A-Za-z\d\h]+)$~m', $s, $matches)

如果您只想匹配行的其余部分而不关心可能存在的字符,则甚至可以将([A-Za-z\d\h]+)替换为(.*)

请参见regex demo

详细信息

  • ^-行的开头(由于m修饰符)
  • (\d{2}[A-Za-z]{3}\d{2})-第1组:两位数字,三个ASCII字母,两位数字
  • \h+-1个或多个水平空格
  • (?!\d+$)-如果行末尾只有数字,则负前行匹配失败。
  • ([A-Za-z\d\h]+)-第2组:一个或多个字符,它们是字母,数字或水平空格
  • .*-尽可能匹配除换行符以外的任意0+个字符
  • $-行尾。