用PHP替换字符串中的字符串

时间:2009-12-05 23:52:29

标签: php regex string

我的应用程序中有用户可以通过表单发送的字符串,他们可以选择用他们也指定的替换替换该字符串中的单词。例如,如果我的一个用户输入了此字符串:

I am a user string and I need to be parsed.

并选择将and替换为foo,结果字符串应为:

I am a user string foo I need to be parsed.

我需要以某种方式找到他们想要替换的内容的起始位置,将其替换为他们想要的单词,然后将它们组合在一起。

有人可以写这个或者至少提供算法吗?我的PHP技能并不能完成任务:(

感谢。 :)

3 个答案:

答案 0 :(得分:3)

$result = preg_replace('/\band\b/i', 'foo', $subject);

会发现and所有出现的单词,并将其替换为foo\b确保在and之前和之后存在单词边界。

答案 1 :(得分:2)

使用preg_replace。虽然你需要学习一些关于正则表达式的知识,但你不需要这么认真思考。 :)

答案 2 :(得分:2)

阅读str_replace,或正则表达式和preg_replace上更复杂的替换。

两者的例子:

<?php
$str = 'I am a user string and I need to be parsed.';
echo str_replace( 'and', 'foo', $str ) . "\n";
echo preg_replace( '/and/', 'foo', $str ) . "\n";
?>

在回答此答案的评论时,请注意上述两个示例都将替换搜索字符串(and)的每个出现,即使它恰好位于另一个单词中。

要注意你要么必须在str_replace调用中添加单词分隔符(参见示例的注释),但是当你想要处理所有常见的单词分隔符时,这将变得非常复杂(空格,逗号,圆点,感叹号,问号等)。

更容易解决此问题的方法是使用正则表达式的强大功能并确保在另一个单词中找不到实际的搜索字符串。请参阅Tim Pietzcker的示例,了解可能的解决方案。