0

我对正则表达式有点生疏,因此希望得到帮助。对于当前的项目,我需要清理一些用户输入并将缩写的英国县名称转换为它们的详细对应项(例如 Lincs => Lincolnshire)。

我编写了一个使用正则表达式来处理这个问题的函数,因为我们只想在缩写位于字符串的开头,或者前面是逗号或空格,然后是空格(或字符串)时进行替换终止)。

因此,考虑 的示例Lincs,应该发生以下替换:

Boston, Lincs=> Boston, Lincolnshire(因为Lincs前面有空格)
Lincs=> Lincolnshire(因为Lincs在字符串的开头)
Test, Lincsto=>Test, Lincsto因为Lincs后面有其他字符)

这是该函数现在的样子:

function fullCounties()
{
    $replacements = array(
        'lincs' => 'Lincolnshire'
    );

    $new = $_REQUEST['place'];
    foreach($replacements as $find => $replace)
    {
        $new = preg_replace('/(^|\W)'.$find.'([\W\d])/', $replace, $new);
    }
    echo $new;
}

但这只是返回 Boston, Lincs,而不是预期的Boston, Lincolnshire。任何人都可以解释正确的正则表达式以符合上述要求,或者建议为什么这个不起作用?

4

2 回答 2

1

我们只想在缩写位于字符串开头,或者前面有逗号或空格,然后是空格(或字符串终止)时进行替换。

将此代码与环视正则表达式一起使用:

$new = preg_replace('/(?<=^|[,\s])'. preg_quote($find) . '(?=\s|$)/', $replace, $new);
于 2013-11-01T15:04:29.260 回答
1

Lincs那是因为您正在使用搜索lincs,并且没有不区分大小写的标志,这将失败。此外,您可能需要查看单词边界 ( \b)。

$new = preg_replace("(\b".preg_quote($find)."\b)i",$replace,$new);
于 2013-11-01T15:04:34.150 回答