2012-05-29 30 views
0

我從正則表達式庫有以下正則表達式,做了一個很好的工作來捕捉一些郵政信箱變化。它不會做的唯一的事情是要匹配的尾部位數:郵政信箱正則表達式幫助匹配尾數

郵政信箱123

任何人都可以請幫助修改此正則表達式也匹配結尾數字?

\b[P|p]?(OST|ost)?\.?\s*[O|o|0]?(ffice|FFICE)?\.?\s*[B|b][O|o|0]?[X|x]?\.?\s+[#]?(\d+)\b 

謝謝。

+2

你是什麼意思的「尾隨數字」? – 2012-05-29 18:44:04

回答

3

假設「郵政信箱123」中的尾部數字是「123」,則正則表達式確實與匹配。它甚至捕獲了反向引用3的編號。

正則表達式中有大量的缺陷。例如,它匹配OST|||| 0

我可以建議我自己的P.O. Box正則表達式?

^(?:Post (?:Office)?|P[. ]?O\.?)?Box #?([0-9]+) 

啓用選項,以使在換行符(通常,/m^$比賽,並啓用不區分大小寫的選項(通常,/i)。不要啓用自由間隔選項(通常爲/x)。

下面是字符串的一些例子它匹配:

  • 郵政信箱#123
  • 郵政信箱123
  • 郵政信箱盒123
  • P O盒123
  • 寶。盒123
  • 郵政信箱123
  • 箱123

尾隨數字捕獲後向引用1

+0

感謝那個正則表達式。它看起來更乾淨。但是,我怎樣才能讓它自己匹配'po box'呢?我試過'[0-9] *'但這似乎不起作用。 – Niner

+0

@Niner,只需將'[0-9] +'更改爲'[0-9] *'不起作用,因爲需要單詞「Box」之後的空格字符。在那個空間之後加一個'?'量詞,你應該很好走。或者,如果您不需要在最後記錄該數字,只需在「Box」後面用字邊界('\ b')替換正則表達式中的所有內容即可。 – slevithan

1

\d+ =一個或多個數字,你在那裏。使用http://regexpal.com/,這是一個救生員。我嘗試了郵政信箱2334328789791297,並採取了它,以及一些其他變化。你的代碼看起來很好(簡短一眼)。

0

我從上面@ slevithan的回答工作,並增加了一些改進,而被拒絕作爲編輯:

(^|(?:post(al)? *(?:office *)?|p[. ]*o\.? *))box *#? *(\w+) 

除了匹配上述情況,它將允許更多的空間之間,或缺乏空格和post/po的短和完整排列實達。字母也被允許用於盒子標識符。警告:確保在模式上啓用多行和不區分大小寫的模式。

enter image description here

0

我創建以處理郵政信箱驗證將採取寶匣的任意組合的護理,也將採取尾隨數字,字符和數字護理模式。模式模式= Pattern.compile(「([P]?(OST | 0ST)?\ s * [.-]?\ s * [O | 0]?(FFICE)?\ s * [.- ] \ S * [B] [0 | 0] [X] \ S *)*「)?。

它對我來說工作得很好,我用很多組合對它進行了測試。

如果您發現任何問題,請讓我知道。

注意:如果您只需要使用PO bOx而不是尾隨序列,那麼只需從末尾刪除*,然後解決該目的。我假設郵政信箱的大寫。