php正则匹配语义化

如下代码

$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/';
preg_match($cityZipCodeRegex, $address, $matches);

saveCityZipCode($matches[1], $matches[2]);

当为了获取city和zipcode,匹配得到两个结果,分别是$matches[1]$matches[2],但是这里并不能直接看出这两个结果分别代表city和zicode,这就给代码可读性带来了很大的影响。

可以使用如下的方法来解决这个问题

$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,\\]+[,\\\s]+(?<city>.+?)\s*(?<zipCode>\d{5})?$/';
preg_match($cityZipCodeRegex, $address, $matches);

saveCityZipCode($matches['city'], $matches['zipCode']);

使用带有名字的子规则,那么就很明显的能看出匹配的结果分别代表什么意思。

如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注