Php 菲律宾比索–;preg_replace()用于字符串中的单词(正则表达式模式)
虽然我已经阅读了很多教程,但我对PHP和数组还是很陌生。请谅解。:) 我的意图: 对于全文搜索,我尝试用包含在单词列表中的自定义其他单词替换字符串中的单词。我突然想到,为了获得整个单词,而不是作为另一个单词的一部分找到的字符串,我必须使用preg_replace()和特定模式,而不是str_replace() 我的问题:如果某个单词是单词列表的一部分,即[apples],我将尝试将[fulltext search中的Short text]替换为[fulltext search中的Short apples]。当然,最后的字符串看起来像[FullApple搜索中的短苹果],或者我得到一些分隔符警告 因此,我试图找出preg_replace()函数的一种模式,即只替换完整单词,而不替换单词中的字符串。最重要的是,我从关联数组中提取单词对,以便更好地了解列表。这就是我是新手的地方 我的考验:Php 菲律宾比索–;preg_replace()用于字符串中的单词(正则表达式模式),php,string,preg-replace,Php,String,Preg Replace,虽然我已经阅读了很多教程,但我对PHP和数组还是很陌生。请谅解。:) 我的意图: 对于全文搜索,我尝试用包含在单词列表中的自定义其他单词替换字符串中的单词。我突然想到,为了获得整个单词,而不是作为另一个单词的一部分找到的字符串,我必须使用preg_replace()和特定模式,而不是str_replace() 我的问题:如果某个单词是单词列表的一部分,即[apples],我将尝试将[fulltext search中的Short text]替换为[fulltext search中的Short ap
$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
返回到preg\u 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
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
返回到preg\u 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
你应该在preg\u replace
上查看手册:你能举一个你的$searchterm
的例子吗?我读了手册,但还是想不起来@srain:$searchterm变量只包含一个简单的字符串。可能不会超过三个不同的单词。strtr
可能就足以完成此任务。为了替换完整的单词而不是组合词中的字符串,我们只需在替换对的开头和结尾添加空格。希望我的回答会有帮助。任何其他问题,请随意评论。嘿,斯兰,非常感谢你的帮助和解释!在我看来,这似乎是合乎逻辑的。然而,如果[$searchterm]只是一个单词,我仍然无法确定如何应用[$from]&[$to]。我猜是因为它在单词前寻找一个空格。我应该用一个直截了当的[if]语句来解决这个问题,还是有一个更优雅的解决方案呢?你应该在preg\u replace
上查看手册:你能举一个你的$searchterm
的例子吗?我读了手册,但我还是想不起来@srain:$searchterm变量只包含一个简单的字符串。可能不会超过三个不同的单词。strtr
可能就足以完成此任务。为了替换完整的单词而不是组合词中的字符串,我们只需在替换对的开头和结尾添加空格。希望我的回答会有帮助。任何其他问题,请随意评论。嘿,斯兰,非常感谢你的帮助和解释!在我看来,这似乎是合乎逻辑的。然而,如果[$searchterm]只是一个单词,我仍然无法确定如何应用[$from]&[$to]。我猜是因为它在单词前寻找一个空格。我应该用一个直截了当的[如果]陈述来解决这个问题,还是有一个更优雅的解决方案呢?非常感谢斯兰!午饭后,我做了一些调整以匹配我的代码的其余部分,我设法让它像一个魔咒一样工作!确实教会了我一些东西。谢谢你这么友好。:)我回顾了我的评论,我的意思是说,不要介意有人投你一票否决票
,错过了一个不
^。非常感谢你,斯莱恩!午饭后,我做了一些调整以匹配我的代码的其余部分,我设法让它像一个魔咒一样工作!确实教会了我一些东西。谢谢你这么友好。:)我回顾了我的评论,我的意思是说,不要介意有人投你一票否决票
,错过了一个不
^。