我有一个正则表达式来检查字符串是否为邮政编码。但我真的很希望能够从完整地址(或者,如果可能的话,任何字符串)中提取它。
这是我当前的正则表达式:
/^((\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 进行检查),但如果可能的话,我宁愿使用正则表达式来完成这项工作。
我有一个正则表达式来检查字符串是否为邮政编码。但我真的很希望能够从完整地址(或者,如果可能的话,任何字符串)中提取它。
这是我当前的正则表达式:
/^((\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 进行检查),但如果可能的话,我宁愿使用正则表达式来完成这项工作。
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
,我假设您在根据正则表达式检查字符串时已经在使用它,它还会为您返回与您的模式匹配的实际文本。
preg_match($regex, $input, $matches);
echo $matches[0];
第三个参数填充了尝试将正则表达式与您的输入相匹配的结果。$matches[0]
将包含与整个模式匹配的文本,而更高的索引将包含与捕获子模式(括号中的模式部分)匹配的文本。
但是,在您的情况下,您已经用输入开始和输入^
结束$
字符包围了您的模式,这意味着任何匹配都必须包括整个输入字符串(或多行模式下的整行)。在尝试使用此模式从较大的字符串中提取邮政编码之前,您必须摆脱^
and 。$
既然您使用的是完整地址,为什么不依赖可以准确提取和验证地址并解析其组件(包括完整邮政编码)并提供良好响应的服务呢?它肯定会消除任何猜测。下面的屏幕截图显示了 SmartyStreets 的一个工具,它可以从各种文本中提取地址。为了全面披露,我是SmartyStreets的一名软件开发人员。
https://smartystreets.com/account/extract