У меня есть регулярное выражение для проверки, является ли строка почтовым/почтовым кодом или нет. Но я действительно хотел бы также иметь возможность извлечь это из полного адреса (или, если возможно, любой строки).
Вот мое текущее регулярное выражение:
/^((\d{5}-\d{4})|(\d{5})|([a-zA-Z]\d[a-zA-Z]\s\d[a-zA-Z]\d)|([a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d))$/
Если необходимо, я готов согласиться на функцию (я проверяю PHP), но я предпочел бы, чтобы regexp выполнял работу, если это возможно.
PHP будет извлекать группы в ()
в массив с <код> preg_match () :
$matches = array();
$pattern = "/^((\d{5}-\d{4})|(\d{5})|([a-zA-Z]\d[a-zA-Z]\s\d[a-zA-Z]\d)|([a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d))$/";
preg_match($pattern, $your_source, $matches);
print_r($matches);
preg_match
, which I assume you're already using when you're checking a string against your regular expression, also gives you back the actual text that matched your pattern.
preg_match($regex, $input, $matches);
echo $matches[0];
Третий аргумент заполняется результатами попыток сопоставления регулярному выражению с вашим вводом. $ matches [0]
будет содержать текст, сопоставляющий весь шаблон, в то время как более высокие индексы будут содержать текст, сопоставляемый с захватом подшаблонов (части шаблона, заключенные в круглые скобки).
Однако в вашем случае вы вложили свой шаблон с символами ввода-вывода ^
и end-of-input $
, что означает, что любые совпадения должны включать целая строка ввода (или целая строка в многострочном режиме). Вам нужно будет избавиться от ^
и $
, прежде чем пытаться использовать этот шаблон для извлечения почтового кода из большей строки.
Поскольку вы работаете с полным адресом, почему бы не полагаться на услугу, которая может точно извлекать и проверять адрес и анализировать его компоненты (включая полный почтовый индекс), обеспечивая хороший ответ? Это наверняка устранит любые догадки. На скриншоте ниже показан инструмент SmartyStreets, который может извлекать адреса из всех видов текста. В интересах полного раскрытия я разработчик программного обеспечения на SmartyStreets .
https://smartystreets.com/account/extract