Хватай его, если он есть, забудь, если это не регулярное выражение - PullRequest
2 голосов
/ 21 июля 2010

Я анализирую файл с деталями адреса. Иногда адрес имеет один номер факса, иногда он имеет два номера факса (в отдельных строках). Как я могу сказать «Если есть второй номер факса, возьмите его. Если нет, забудьте об этом» моему механизму регулярных выражений?

Вот пример с одним номером факса:

Тел: +1 212 12345
Факс: +1 212 23456

Район HQ: Спрингфилд

и с двумя номерами факса:

Тел: +1 212 12345
Факс: +1 212 23456
Факс: +1 212 34567

Район HQ: Спрингфилд

Я использую 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 Ответ

1 голос
/ 21 июля 2010

Ты почти понял:)

$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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...