Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.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_String_Replace - Fatal编程技术网

Php 在两个单词之间替换一个字符

Php 在两个单词之间替换一个字符,php,string,replace,Php,String,Replace,我有一个字符串,比如诸如此类的废话[START]Hello World[END]诸如此类的废话 我想将-替换为,介于[START]和[END]之间 所以结果应该是blah blah[START]Hello,World[END]blah blah你必须使用正则表达式来完成你需要的 $string = "blah blah [START]Hello-World[END] blah blah"; $string = preg_replace('/\[START\](.*)-(.*)\[END\]/',

我有一个字符串,比如
诸如此类的废话[START]Hello World[END]诸如此类的废话

我想将
-
替换为
介于
[START]
[END]
之间


所以结果应该是
blah blah[START]Hello,World[END]blah blah
你必须使用
正则表达式来完成你需要的

$string = "blah blah [START]Hello-World[END] blah blah";
$string = preg_replace('/\[START\](.*)-(.*)\[END\]/', '[START]$1,$2[END]', $string));
下面是正则表达式的作用:

\[START\]
需要反斜杠来转义方括号。它还告诉preg_replace查找以
[START]
开头的字符串

(.*)
这将捕获
[START]
之后的任何内容,稍后将作为
$1
引用

-
这将捕获您想要替换的字符,在我们的例子中是破折号

(.*)
这将针对破折号之后的任何内容,稍后将被引用为
$2

\[END\]
查找[END]以结束正则表达式

现在,对于replace部分
[START]$1,$2[END]
,这将用正则表达式替换它找到的字符串,其中$1和$2是我们从前面得到的引用

$string
的变量转储将是:

string(43) "blah blah [START]Hello,World[END] blah blah"
我建议使用:

输出:

诸如此类[开始]你好,世界。你好吗?[结束]诸如此类[开始]更多,这里发短信,[结束]留言结束

正则表达式的思想是得到三个部分:“开始”、“结束”和它之间的部分。函数将这三个文本片段传递给回调函数,回调函数执行中间部分的简单操作,并返回这三个片段


通过这种方式,您可以确保不仅第一次出现(连字符或您替换的任何字符)时会发生替换,而且每次出现时都会发生替换。

您尝试过什么吗?向我们展示一些代码,然后我们将帮助您改进/修复它,以实现您的期望。我们不为您编写代码。我可以给您一个在PHP中从何处开始的提示,您需要使用带有preg_replace的正则表达式,使用lookahead(对于[END])和lookback(对于[start])断言。我只有这段代码,但这只是将
[start]Hello World[END]
替换为
。这是代码<代码>预替换(“/\[START\](.*?\[END\]/”,“,”,$str)
$string = "blah-blah [START]Hello-World. How-are-you?[END] blah-blah" .
          " [START]More-text here, [END] end of-message";
$string = preg_replace_callback('/(\[START\])(.*?)(\[END\])/', function($matches) {
    return $matches[1] . str_replace("-", ",", $matches[2]). $matches[3];
}, $string);

echo $string;