在不同变量替换下使用preg_replace

问题描述 投票:0回答:1

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

例如,我可以在下面的代码中找到字符串'od',':od','od:','#od'和'od'。我只想将“ od”部分替换为“ odometer”一词,并保持冒号,主题标签和空白不变。但是,我当前的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);

}

regex replace preg-replace
1个回答
0
投票

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

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

$original_parsed = array_map('add_regex_finders',$original);
preg_replace($original_parsed, '$1' . $translated . '$2',$original);
© www.soinside.com 2019 - 2024. All rights reserved.