regex - 将 preg_replace 与不同的变量替换一起使用
问题描述
我正在尝试使用 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_regex_finders
when it should be的调用$abbreviation
。
推荐阅读
- c# - 是否有一个 Winforms 文本框事件可以在文本框被访问且不一定被更改时触发?
- javascript - 生成代码来表示托尼·斯塔克钯颈效应
- web - PerformanceResourceTiming.transferSize 在某些网页中返回 0
- pypy - argparse: ArgumentParser().add_subparsers: TypeError: __init__() got an unexpected keyword argument 'required'
- python-3.x - 更改列表中每个字典的特定键的值 - python
- sql - 需要在 SQL 中查找 Min & Max date 特定状态列值
- ios - 为什么在 swift 上编写函数不能在领域中工作?
- download - 如何从需要身份验证的网站下载视频
- java - 如何将对象数组转换为自定义类对象(即数组到对象)?
- javascript - 完成 Firebase 身份验证后,如何将数据发布到 signInSuccessUrl?