抓住它,如果它在那里,忘记它,如果它不是正则表达式

时间:2010-07-21 18:18:18

标签: php regex

我正在解析一个包含地址详细信息的文件。有时地址有一个传真号码,有时它有两个传真号码(在不同的行上)。我怎么能说“如果有第二个传真号码,抓住它。如果没有,请忘记它”到我的正则表达式引擎?

以下是一个传真号码的示例:

  

电话:+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 个答案:

答案 0 :(得分: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。