正则表达式匹配PHP中的所有英国车牌

正则表达式匹配PHP中的所有英国车牌,php,regex,Php,Regex,我正在尝试搜索字符串以查找所有有效的英国车牌。我发现以下正则表达式与2001年前后的英国车牌匹配: ^([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$ 我如何使用preg_match_all返回字符串中找到的所有有效车牌 例如: 这是一些随机文

我正在尝试搜索字符串以查找所有有效的英国车牌。我发现以下正则表达式与2001年前后的英国车牌匹配:

^([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$
我如何使用preg_match_all返回字符串中找到的所有有效车牌

例如:

这是一些随机文本NV07 ABC这是A0123 ABC另一些随机文本AB08ABC

应返回:

  • NV07 ABC

  • AB08ABC


^
$
(字符串的开头和结尾)锚定替换为
\b
(单词的开头/结尾)锚定

从php手册中:

int-preg_-match_-all(字符串$pattern,字符串$subject[,数组和$matches[,int$flags=preg_-pattern_-ORDER[,int$offset=0]]))

在subject中搜索模式中给定正则表达式的所有匹配项,并按标志指定的顺序将它们置于>中

找到第一个匹配项后,将从>最后一个匹配项的末尾继续后续搜索

所以你需要做:

a = array();
preg_match_all ( your_regexp , your_random_string,a)

注意,正则表达式有一个错误,导致它匹配ABCdD而不是ABC1D作为一个号码牌

它缺少第一个“(\d{3}\d{2}\d{1})”中的“\”,应该是“(\d{3}\d{2}\d{1})”

这不是一个大问题,因为它只影响1983年或更早注册的只有一位数的车牌

我可能会将其更新为:

^([A-Z]{3}\s?(\d{1,3})\s?[A-Z])|([A-Z]\s?(\d{1,3})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?(0[2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$
与上面相同,这仍然匹配一些可能无效的前缀/后缀字母,例如IOUZ。Q作为后缀也可能无效。对于其他从其他来源找到这篇文章和这个正则表达式的人来说,它也不匹配无日期车牌(1903-1963年发行)或北爱尔兰车牌(也是英国的一部分),如果你关注个性化车牌,这两种车牌都可能会成问题。因此,请记住这些限制。

有一个非常好的正则表达式,它基于:

(2)代码::::::)代码::::::::::::::::::::::::::[A-Z[A-Z[0-Z[0-Z[0-Z[0-Z][0-9[1,3}[A-Z[[A-Z]{{{{2.2}[2}[2}[0-3}[0-3}[0-2}[2}[0-2}[0-2}[2}[0-2}[0-2}[0-0-2}[0-3}[2}[2}[0-0-2[0-3[2[2[2[2[2[2[2[2[2[0-Z[0-Z[0-Z[0-0-0-0[0-Z[0-0[0[0[0[0[0-0[3[3[3[3[3[3[3[3}[0-9]{1,4}$)|(?^[A-Z]{1,3}[0-9]{1,3}$)
但这在这里行不通,因为正则表达式将匹配锚定到字符串的开头和结尾。是的,我想你是对的。我假设他在回答时有一个正确的regexp。他的regex是正确的,但用于不同的用例(验证与模式识别)。太好了,这非常有效。。谢谢关于正则表达式,我有很多东西要学。。
^([A-Z]{3}\s?(\d{1,3})\s?[A-Z])|([A-Z]\s?(\d{1,3})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?(0[2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$
(?<Current>^[A-Z]{2}[0-9]{2}[A-Z]{3}$)|(?<Prefix>^[A-Z][0-9]{1,3}[A-Z]{3}$)|(?<Suffix>^[A-Z]{3}[0-9]{1,3}[A-Z]$)|(?<DatelessLongNumberPrefix>^[0-9]{1,4}[A-Z]{1,2}$)|(?<DatelessShortNumberPrefix>^[0-9]{1,3}[A-Z]{1,3}$)|(?<DatelessLongNumberSuffix>^[A-Z]{1,2}[0-9]{1,4}$)|(?<DatelessShortNumberSufix>^[A-Z]{1,3}[0-9]{1,3}$)