PHP preg_match找到相关的单词

时间:2012-01-27 09:25:08

标签: php arrays string preg-match str-replace

我有一个像这样的值的变量:

$sentence = "When it comes time to renew your auto insurance policy, be aware of how your carrier handles renewals";

我的数组变量的值如下:

$searches = array('aware', 'aware of', 'be aware', 'be aware of');

$replaces = array('conscious', 'conscious of', 'remember', 'concentrate on');

我想找到'意识到',然后用'专心'代替。输出如下:

  

到了续订汽车保险政策的时候,请专注于运营商处理续订的方式

仅搜索“请注意”作为相关同义词替换而不是其他人。谢谢你的帮助。

好的,这里有新代码:

$searches = array('aware of', 'be aware of', 'be aware', 'aware');

$replaces = array('conscious of', 'concentrate on', 'remember', 'conscious');

这是一个动态数组($searches),我希望你理解......我们知道要获得最好的同义词替换是使用''意识到'替换'专注于'。输出如下:

  

到了续订汽车保险政策的时候,请专注于运营商处理续订的方式

4 个答案:

答案 0 :(得分:1)

我认为你的搜索& replace数组是静态的。

试试这个,

str_replace($searches[3],$replaces[3],$sentence)

另外,只需替换特定的“小心”,您可以通过以下方式完成:

str_replace("%be aware of%","concentrate on",$sentence)

答案 1 :(得分:1)

这里不需要正则表达式,

首先以某种方式对常量数组进行排序,使其首先找到最大匹配:

$searches = array('be aware of', 'aware of', 'be aware', 'aware');
$replaces = array('concentrate on', 'conscious of', 'remember', 'conscious');

然后使用str_replace

$newsentence=str_replace($searches,$replaces, $sentence);

答案 2 :(得分:1)

如果更改搜索顺序以使第一个元素与数组中的元素不匹配,则可以正常使用str_replace($searches, $replaces, $subject);

$searches = array('be aware of', 'be aware', 'aware of', 'aware');
$replaces = array('concentrate on', 'remember', 'conscious of', 'conscious');

如果字符串包含“要注意”,“请注意”将不匹配,并且“请注意”将。如果你有相反的顺序,“意识到”会匹配“意识到”这将是错误的。

答案 3 :(得分:0)

怎么样:

$sentence = "When it comes time to renew your auto insurance policy, be aware of how your carrier handles renewals";
$searches = array('aware', 'aware of', 'be aware', 'be aware of');
$replaces = array('conscious', 'conscious of', 'remember', 'concentrate on');

function cmp($a, $b) {
    if (strpos($a, $b) !== false) return -1;
    if (strpos($b, $a) !== false) return 1;
    return 0;
}

uasort($searches, 'cmp');
$replaces_new = array();
$i=0;
foreach($searches as $k=>$v) {
    $replaces_new[$i] = $replaces[$k];
    $i++;
}

$res = str_replace($searches, $replaces_new, $sentence);
echo $res;

<强>输出:

When it comes time to renew your auto insurance policy, concentrate on how your carrier handles renewals