代码之家  ›  专栏  ›  技术社区  ›  nevan king

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

  •  2
  • nevan king  · 技术社区  · 15 年前

    我正在分析包含地址详细信息的文件。有时地址有一个传真号码,有时有两个传真号码(在不同的行上)。我怎么能说“如果有第二个传真号码,抓住它。如果没有,忘记它“对我的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 回复  |  直到 15 年前
        1
  •  1
  •   Josiah    15 年前

    你快明白了:)

    $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,您需要使用方括号:【a b c】。要创建可选组,请使用parens。