php正则匹配语义化

该文章由 leevare 发布于 ,归类于 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']);

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

如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!

相关文章:

说点什么

avatar
300
  Subscribe  
提醒