使用带有PHP的正则表达式替换文本

时间:2011-03-08 18:19:27

标签: php regex

我有一个类似"apple|banana|peach|cherry"的字符串。

如果匹配,如何使用正则表达式搜索此列表并将其他字符串替换为某个值?

例如:

$input = 'There is an apple tree.';

将其更改为:"There is an <fruit>apple</fruit> tree."

谢谢, 阿曼达

4 个答案:

答案 0 :(得分:8)

试试这个:

<?php
$patterns ="/(apple|banana|peach|cherry)/";

$replacements = "<fruit>$1</fruit>";

$output = preg_replace($patterns, $replacements, "There is an apple tree.");
echo $output;
?>

有关详细信息,请查看php manual on preg_replace

更新: @Amanda:根据您的评论,您可以将此代码修改为:

$patterns ="/(^|\W)(apple|banana|peach|cherry)(\W|$)/";
$replacements = "$1<fruit>$2</fruit>$3";

避免匹配弹劾和废话

答案 1 :(得分:0)

preg_replace function

虽然,如果你想直接匹配,那么使用str_replace或str_ireplace会更快:

$text = "some apple text";
$fruits = explode("|", "apple|orange|peach");
$replace = array('replace apple', 'replace orange', 'replace peach');

$new = str_replace($fruits, $replace, $text);

答案 2 :(得分:0)

$input = 'There is an apple tree.';
$output = preg_replace('/(apple|banana|peach|cherry)/', "<fruit>$1</fruit>", $input);

答案 3 :(得分:0)

总体而言,可能有更好的方法来做到这一点,但这将涉及您提供有关您的设置和总体目标的更多详细信息。但你可以这样做:

$input = preg_replace('~(apple|banana|peach|cherry)~','&lt;fruit>$1&lt;/fruit>',$input);