2013-10-03 62 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