繁体   English   中英

PHP – preg_replace()用于字符串中的单词(正则表达式模式困难)

[英]PHP – preg_replace() for words in string (regex pattern difficulties)

尽管我已经阅读了很多教程,但我还是PHP和Arrays的新手。 请谅解。 :)

我的目的:为了进行全文搜索,我试图用单词列表中包含的其他自定义单词替换字符串中的单词。 在我看来,为了获得整个单词而不是找到的字符串作为另一个单词的一部分,我必须使用具有特定模式的preg_replace()而不是str_replace()。

我的问题:如果某个单词是单词列表(例如[apples])的一部分,我正尝试将[[全文搜索中的短文本]]替换为[全文搜索中的短苹果]。 自然,最终的字符串看起来像[在fullapples中搜索短苹果]或我收到一些定界符警告。

因此,我试图为preg_replace()函数找出一种模式,该模式仅替换完整单词,而不替换组合单词中的字符串。 最重要的是,我将单词对从关联数组中拉出,以更好地了解列表。 这是我的新手。

我的试验:

$replacements = array(
                  'text' => 'apples',
                  etc…
                );

$pattern = '#\b'($searchterm)'\b#;
$searchterm = preg_replace(array_keys($replacements), $pattern, $searchterm);

echo $searchterm;

谢谢您的帮助!

strtr可能足以完成此任务。

为了替换完整单词而不是组合单词中的字符串,我们只需在替换对的开头和末尾添加blank即可。

<?php
$replacements = array(
    'text' => 'apples',
);

$realRreplacements = array();
foreach ($replacements as $from => $to)
{
    $from = ' ' . $from . ' ';
    $to = ' ' . $to . ' ';
    $realRreplacements[$from] = $to;
}

$str = 'Short text in a fulltext search';
$str = strtr($str, $realRreplacements);
echo $str, "\n";
// output: Short apples in a fulltext search

-

                      ************ update *************

转回preg_replace

<?php
$list = array(
    'text' => 'apples',
    'Short' => 'Long',
    'search' => 'find',
);
$pattens = array();
$replacement = array();
foreach ($list as $from => $to)
{
    $from = '/\b' . $from . '\b/';
    $pattens[] = $from;
    $replacement[] = $to;
}
$str = 'Short text in a fulltext search';
$str = preg_replace($pattens, $replacement, $str);
echo $str, "\n"; // Long apples in a fulltext find

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM