Regex 使用preg_replace替换不同的变量

Regex 使用preg_replace替换不同的变量,regex,replace,preg-replace,Regex,Replace,Preg Replace,我尝试使用preg_replace来搜索字符串,但仅以动态方式替换字符串的一部分,而不是整个字符串 例如,我可以在下面的代码中找到字符串'od'、':od'、'od:'、'#od'和'od'。我只想用单词“里程表”替换“od”部分,保留冒号、标签和空格不变。然而,我当前preg_replace的编写方式将替换冒号和标签,以及字母本身。有没有创造性的解决方案来只替换角色,而保留周围的符号 谢谢大家! if(isset($_POST["text"])) { $original = $_POS

我尝试使用preg_replace来搜索字符串,但仅以动态方式替换字符串的一部分,而不是整个字符串

例如,我可以在下面的代码中找到字符串'od'、':od'、'od:'、'#od'和'od'。我只想用单词“里程表”替换“od”部分,保留冒号、标签和空格不变。然而,我当前preg_replace的编写方式将替换冒号和标签,以及字母本身。有没有创造性的解决方案来只替换角色,而保留周围的符号

谢谢大家!

if(isset($_POST["text"]))
{
    $original = $_POST["text"];
    $abbreviation= array();
    $abbreviation[0] = 'od';
    $abbreviation[1] = 'rn';        
    $abbreviation[2] = 'ph';
    $abbreviation[3] = 'real';  
    $translated= array();
    $translated[0] ='odometer';
    $translated[1] ='run';
    $translated[2] ='pinhole';
    $translated[3] ='fake';

function add_regex_finders($str){
    return "/[\s:\#]" . $str . "[\s:]/i";
}

$original_parsed = array_map('add_regex_finders',$original);
preg_replace($original_parsed,$translated,$original);

}


您可以在匹配缩写前后的字符周围添加捕获组,然后将组引用添加到替换字符串:

function add_regex_finders($str){
    return "/([\s:\#])" . $str . "([\s:])/i";
}

$abbrevs_parsed = array_map('add_regex_finders', $abbreviation);
$translt_parsed = array_map(function ($v) { return '$1' . $v . '$2'; }, $translated);
echo preg_replace($abbrevs_parsed, $translt_parsed, $original);


请注意,您的代码中有一个输入错误,将
$original
传递给调用
add\u regex\u finders
时,它应该是
$缩写

谢谢您,尼克,这太棒了。我不知道正则表达式的那个方面@本:不用担心,我很高兴能帮上忙。