2010-07-21 47 views
2

我解析文件的地址細節。有時地址有一個傳真號碼,有時它有兩個傳真號碼(分開)。我怎麼能說「如果有第二個傳真號碼,抓住它,如果沒有,請把它忘記」給我的正則表達式引擎?抓住它,如果它在那裏,忘記它,如果它不是正則表達式

這裏有一個傳真號碼的例子:

電話:+1 212 12345
傳真:+1 212 23456

區總部:斯普林菲爾德

,並有兩個傳真號碼:

電話:+1 212 12345
傳真:+1 212 23456
傳真:+1 212 34567

區總部:斯普林菲爾德

我使用PHP的preg_match_all獲得比賽:

$shop_name_regexp = 
     '/' . 
     'Tel.*?:(?<telephone>.*?)\n' . // Tel: or Telephone: 
     'Fax:(?<fax>.*?)\n.*?' . 
     '/s'; 
preg_match_all($shop_name_regexp, $string, $hit); 

我想我可以用[Fax:(?<fax2>.*?)]?之類的東西來獲取第二個傳真號碼,但我無法正常工作。任何幫助讚賞。

回答

1

你已經基本得到它:)

$shop_name_regexp = 
    '/' . 
    'Tel.*?:(?<telephone>.*?)\n' . // Tel: or Telephone: 
    'Fax:(?<fax>.*?)\n\s*?' . 
    '(Fax:(?<fax2>.*?))?\n.*?' . 
    '/s'; 
preg_match_all($shop_name_regexp, $string, $hit); 

方括號表示一個字符類。所以要匹配a,b或c,你可以使用方括號:[abc]。要創建可選組,請使用parens。

+0

輝煌,完美的作品。非常感謝。 – 2010-07-21 18:43:35

+0

很高興幫助:) – Josiah 2010-07-21 18:48:50

相關問題