Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中替换字符串中的字符串_Php_Regex_String - Fatal编程技术网

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

在PHP中替换字符串中的字符串,php,regex,string,Php,Regex,String,我的应用程序中有一些字符串,用户可以通过表单发送这些字符串,他们可以选择用他们指定的替换项替换该字符串中的单词。例如,如果我的一个用户输入了以下字符串: I am a user string and I need to be parsed. 并选择用foo替换和,结果字符串应为: I am a user string foo I need to be parsed. 我需要以某种方式找到他们想要替换的东西的起始位置,用他们想要的词替换它,然后把它们联系在一起 有人能写出来,或者至少提供一个算

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

I am a user string and I need to be parsed.
并选择用
foo
替换
,结果字符串应为:

I am a user string foo I need to be parsed.
我需要以某种方式找到他们想要替换的东西的起始位置,用他们想要的词替换它,然后把它们联系在一起

有人能写出来,或者至少提供一个算法吗?我的PHP技能无法胜任这项任务:(

谢谢。:)

使用。您不需要对此进行太多思考,尽管您需要学习一点正则表达式。:)

请仔细阅读,或了解正则表达式和的更复杂替换

这两方面的例子:

<?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";
?>


作为对该答案评论的回应,请注意,上述两个示例将替换搜索字符串(
)的每次出现,即使它恰好位于另一个单词中

要解决这个问题,您必须将单词分隔符添加到
str_replace
调用中(请参见示例的注释),但如果要处理所有常用的单词分隔符(空格、逗号、点、感叹号、问号等),这将变得相当复杂

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

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

将查找所有出现的
,其中它本身是一个单词,并将其替换为
foo
\b
确保
前后都有一个单词边界,而且

正则表达式完全值得。这就是你需要的答案。花点时间提前阅读一些关于它们的信息以及它们是如何工作的。你可以用它做很多出人意料的酷东西!哈哈,是的。我想regexes改变了我的生活。这可能有点奇怪……在正则表达式中有一个回调函数来确定用什么词来替换它是个好主意。复杂的一点是创建一个正则表达式,该正则表达式与假设的单词相匹配。人,不要。说话。-输入句子+像这样。我是说,你还是明白的,对吧?;-)然而,对于给出的示例,我认为正则表达式有点过分了。一个简单的stru_替换就可以了。这可能是真的,但最好同时学习这两种方法。preg_replace将允许您做更复杂的事情,当您决定str_replace不再适合您最初需要做的事情时,您将知道preg_replace,并且您将开始感觉它们在哪里都适用。@Tim Pietzcker:
echo str_replace('and','foo',$str)。“\n”@Brendan:“但是如果他尝试了(但仍然没有成功)?”:)好吧,很公平;如果您查看它并希望替换word wise;)我将在我的答案中添加一些内容来解决这个问题:)作为将来的参考,php最好的部分是如何以
站点:php.net[你想知道的]
的形式进行Google搜索,因此(例如)你可以通过搜索快速找到如何替换字符串的方法“>
站点:php.net替换字符串
。这不是一个糟糕的问题,但你可以更快地得到答案。显然,这个网站不喜欢评论中的链接。如果用户选择要查找/替换的单词,你应该使用
preg_quote($find,“/”)
,以确保它们不会破坏正则表达式。