2013-10-03 64 views
1

我正在制作一个正则表达式来匹配所有有效的国际航班号以及航班代码。根据Wikipedia,有效航班代码的格式为XX(a)NNNN(a),其中X = [A-Za-z0-9],a = [A-Za-z]N = [0-9]缩短航班号正则表达式

由于我想匹配两个航班代码和数字,我做了XX(a)(a)可选。第一个(a)是完全可选的,但前XX必须存在(a)以匹配(如果存在)。我做了以下正则表达式,但如果可能的话我想缩短它。

^(([A-Za-z0-9]{2}([A-Za-z])?)?)([0-9]{4})(([A-Za-z]{1})?)$

我想过做匹配组,因为有些群体,如前和后的数字的(a)组是相同的,将其缩短。你将如何缩短这个正则表达式?

+1

你在使用什么语言/正则表达式环境? – Jerry

+0

Javascript和Ruby。 – josh

+0

维基百科页面不再提供这种格式(并且我怀疑它也是错误的,因为航班号码/代码不需要将它们的数字部分填充到4位数字。但是,查找官方源代码并不容易。请去http://en.wikipedia.org/wiki/Airline_codes xx(a)n(n)(n)(n)(a) - 括号中的所有字符都是可选的 – Jason

回答

2

可以在JavaScript和Ruby的使用:

/^([^\W_]{2}[a-z]?)?(\d{4})[a-z]?$/i 

标志i为不区分大小写,并且你仍然可以得到的数字。整个航班代码位于数组的第一个元素中,第二个元素中的数字。

由于[^\W],如果你不指望外国字符,使用[^\W_]将意味着只有[a-z0-9]无视外国字符相当于\w即​​。

+0

我在[Regexpal]中尝试过你的正则表达式(http://regexpal.com/?flags=gm®ex= %5E(%5B%5E%5CW_%5D%7B2%7D%5Ba上-Z%5D)%3F(%5CD%7B4%7D)%5Ba上-Z%5D%3F%24&输入= AA1334%0A1234%0AAAL1234z%0AAA12345 ),但它不适用于航班号以外的其他任何事情。 – josh

+0

@JoshuaSmock You必须检查不区分大小写 – Jerry

+0

它仍然失败的有效的航班代码“AA1334” – josh