gpt4 book ai didi

php - 从数组中替换(添加)区分大小写的单词

转载 作者:可可西里 更新时间:2023-10-31 23:16:43 26 4
gpt4 key购买 nike

我是 php 的新手,尤其是正则表达式。我的目标是使用数组中列出的“关键字”提示自动丰富文本。

到目前为止我已经来了。

$pattern = array("/\bexplanations\b/i",
"/\btarget\b/i",
"/\bhints\b/i",
"/\bhint\b/i",
);

$replacement = array("explanations <i>(Erklärungen)</i>",
"target <i>Ziel</i>",
"hints <i>Hinsweise</i>",
"hint <i>Hinweis</i>",
);

$string = "Target is to add some explanations (hints) from an array to
this text. I am thankful for every hint.";

echo preg_replace($pattern, $replacement, $string);

返回:

target <i>Ziel</i> is to add some explanations <i>(Erklärungen)</i> (hints <i>Hinsweise</i>) from an array to this text. I am thankful for every hint <i>Hinweis</i>

1)总的来说,我想知道是否有更优雅的解决方案(最终不替换原词)?稍后说明数组将包含 1000 多个项目......并且来自 mariadb。

2) 我怎样才能实现“目标”一词区分大小写?(不重复我的数组的长度)。

抱歉我的英语不好,非常感谢。

最佳答案

如果您计划增加数组的大小并且文本可能有点长,则处理所有文本(每个单词一次)并不是一种可靠的方法。此外,对于大型数组,用所有单词构建一个巨大的交替是不可靠的。但是,如果您将所有翻译存储在一个关联数组中并在单词边界上拆分文本,您可以一次性完成:

// Translation array with all keys lowercase
$trans = [ 'explanations' => 'Erklärungen',
'target' => 'Ziel',
'hints' => 'Hinsweise',
'hint' => 'Hinweis'
];

$parts = preg_split('~\b~', $text);

$partsLength = count($parts);

// All words are in the odd indexes
for ($i=1; $i<$partsLength; $i+=2) {
$lcWord = strtolower($parts[$i]);

if (isset($trans[$lcWord]))
$parts[$i] .= ' <i>(' . $trans[$lcWord] . ')</i>';
}

$result = implode('', $parts);

实际上这里的限制是你不能使用包含单词边界的键(例如,如果你想用几个单词翻译整个表达式),但如果你想处理这种情况,你可以使用preg_match_all 代替 preg_split 并构建一个模式来测试这些特殊情况,例如:

preg_match_all('~mushroom pie\b|\w+|\W*~iS', $text, $m);

$parts = &$m[0];
$partsLength = count($parts);

$i = 1 ^ preg_match('~^\w~', $parts[0]);

for (; $i<$partsLength; $i+=2) {

...

(如果您有很多异常(exception)(太多)其他策略也是可能的。)

关于php - 从数组中替换(添加)区分大小写的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40057342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com