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

时间:2013-07-23 01:35:52

标签: php string preg-replace

我是PHP&的新手数组即使我已经阅读了很多教程。请理解。 :)

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

我的问题:如果某个单词是单词列表的一部分,即[苹果],我正在尝试用[短文中的替换]来替换ie [全文搜索中的短文本]全文搜索]。当然最后的字符串看起来像[在fullapples搜索中的短苹果]或者我得到一些分隔符警告。

所以我试图找出preg_replace()函数的模式,只替换完整的单词,而不是组合单词中的字符串。最重要的是,我将关联数组中的单词对拉出来以更好地概览列表。这是我是新手的地方。

我的试验

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

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

echo $searchterm;

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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