我正在解析一个包含地址详细信息的文件。有时地址有一个传真号码,有时它有两个传真号码(在不同的行上)。我怎么能说“如果有第二个传真号码,抓住它。如果没有,请忘记它”到我的正则表达式引擎?
以下是一个传真号码的示例:
电话:+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>.*?)]?
这样的东西抓住第二个传真号码,但是我无法让它运转起来。任何帮助表示赞赏。
答案 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。