在PHP中优化preg_match()



我在PHP中使用以下函数从包含"接近";其中使用CCD_ 1。有没有更优化的方法来编写代码?我使用了很多if语句,看起来它可以改进,但我不确定如何改进。

// Test cases
$q = "red robin near seattle";
//$q = "red robin near me";
//$q = "red robin nearby";
//$q = "red robin near my location";
function getEntityAndLocation($q){
$entityAndLocation = array("entity" => null, "location" => null);
if(preg_match('(nearby)', $q) === 1) {
$breakdown = explode("nearby", $q);
$entityAndLocation["entity"] = $breakdown[0];
$entityAndLocation["location"] = $breakdown[1];
return $entityAndLocation;
}
if(preg_match('(near my location)', $q) === 1) {
$breakdown = explode("near my location", $q);
$entityAndLocation["entity"] = $breakdown[0];
$entityAndLocation["location"] = $breakdown[1];
return $entityAndLocation;
}
if(preg_match('(near me)', $q) === 1) {
$breakdown = explode("near me", $q);
$entityAndLocation["entity"] = $breakdown[0];
$entityAndLocation["location"] = $breakdown[1];
return $entityAndLocation;
}
if(preg_match('(near)', $q) === 1) {
$breakdown = explode("near", $q);
$entityAndLocation["entity"] = $breakdown[0];
$entityAndLocation["location"] = $breakdown[1];
return $entityAndLocation;
}
}
if(preg_match('(near)', $q) === 1) {
$entityAndLocation = getEntityAndLocation($q);
print_r($entityAndLocation);
}

使用preg_split()使用正则表达式作为分隔符来拆分字符串。您可以编写一个匹配所有模式的正则表达式。

function getEntityAndLocation($q){
$entityAndLocation = array("entity" => null, "location" => null);
$breakdown = preg_split('/near(?:by| my location| me)?/', $q);
if (count($breakdown) >= 2) {
$entityAndLocation["entity"] = $breakdown[0];
$entityAndLocation["location"] = $breakdown[1];
return $entityAndLocation;
}
return $entityAndLocation;
}

正则表达式匹配near,可以选择后面跟bymy locationme

最新更新