最佳匹配REGEXP模式

时间:2017-12-06 08:10:03

标签: php regex

我需要查找字符串中可能出现的3种格式(A = Letter;#= digit):

A###A
A####
A#####

示例:

This booking has the ID of A#####.

字符串只能包含三个示例模式中的一个。我用OR运算符编写了这个REGEXP,所以我可以检查并提取我需要的ID:

([a-zA-Z]\d{4})|([a-zA-Z]\d{3}[a-zA-Z])|([a-zA-Z]\d{5})

问题是,它没有从REGEXP返回最佳匹配,而是第一次匹配。例如,如果字符串包含A#####,它将返回A####,忽略最后一位数 - 因为它已经与之前的模式匹配。

我错过了什么? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

\b[a-zA-Z]\d{3}(?:[a-zA-Z]|\d{1,2})\b

[a-zA-Z]\d{3} - 常数部分

([a-zA-Z]|\d{1,2}) - 字母,一个或两位数字

demo

答案 1 :(得分:0)

在匹配4个字符之前,您可以检查匹配的5个字符。 这样它在检测到4之前总会检测到5。 您只需切换5和4即可。

([a-zA-Z]\d{5})|([a-zA-Z]\d{4})|([a-zA-Z]\d{3}[a-zA-Z])