Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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_Replace_Preg Replace_Str Replace - Fatal编程技术网

Php 搜索并替换多行字符串中的所有行

Php 搜索并替换多行字符串中的所有行,php,replace,preg-replace,str-replace,Php,Replace,Preg Replace,Str Replace,我有一个字符串,其中包含一个大列表,项目名称如下: str = "f05cmdi-test1-name1 f06dmdi-test2-name2"; 所以前4个字符是随机字符。我希望有这样一个输出: 'mdi-test1-name1', 'mdi-test2-name2', 正如您所看到的,字符串中的第一个字符需要替换为“并且每行都需要以”结尾 如何将上面的字符串更改为下面的字符串?我试过用“strstr”和“str_replace”来代替我们的,但我无法让它工作。如果我能让它工作的话,我会

我有一个字符串,其中包含一个大列表,项目名称如下:

str = "f05cmdi-test1-name1
f06dmdi-test2-name2";
所以前4个字符是随机字符。我希望有这样一个输出:

'mdi-test1-name1',
'mdi-test2-name2',
正如您所看到的,字符串中的第一个字符需要替换为“并且每行都需要以”结尾

如何将上面的字符串更改为下面的字符串?我试过用“strstr”和“str_replace”来代替我们的,但我无法让它工作。如果我能让它工作的话,我会节省很多时间

谢谢你们的帮助,伙计们

编辑:我删除了上面的内容,因为下面的方法更好、更可靠,可以用于四个字符的任何可能组合

那么,如果有一百万种不同的可能性作为起始角色,我该怎么办

在您的特定示例中,我看到完整字符串之间只有空格(完整字符串=
“f05cmdi-test1-name1”

因此:

导致:

$result_array = [
    "mdi-test1-name1",
    "mdi-test2-name2",
    "....."
];
如果希望单个字符串的样式为:

“'mdi-test1-name1'、'mdi-test2-name2'、'…'”

然后,您可以简单地执行以下操作:

$result_final = "'" . implode("','" , $result_array) . "'";

这在相当简单的正则表达式模式中是可行的

<?php

$str = "f05cmdi-test1-name1
f05cmdi-test2-name2";

$str = preg_replace("~[a-z0-9]{1,4}mdi-test([0-9]+-[a-z0-9]+)~", "'mdi-test\\1',", $str);
echo $str;

以下是完成此项工作的方法:

$input = "f05cmdi-test1-name1
f05cmdi-test2-name2";

$result = preg_replace("/.{4}(\S+)/", "'$1',", $input);
echo $result;

其中,
\S
表示非空格字符。

您对正则表达式感兴趣了吗?谢谢,这非常有效,但我发现也有以
f09cmdi
f11dmdi
开头的行。例如,它可以是
$str=“f11dmdi-test1-name1 f09cmdi-test2-name2”效果很好,谢谢。当
测试
名称也更改时,是否也可以使用his?例如,如果列表包含
$str=“f05cmdi abc def f05cmdi ghi klm”?不,它查找测试。在这一点上,您将希望自己更深入地了解regex,这样您就可以了解如何修改模式以满足您的需求。如果没有完整的列表,我无法编写正则表达式来匹配我不知道的测试用例。我完全理解。我的列表以
f002mdi接入点f003mdi接入点网络f004mdi帐户f005mdi帐户警报f006mdi帐户框f007mdi帐户框大纲开始基于此列表是否可能?非常感谢Rafael,但我发现也有以
f09cmdi
f11dmdi
开始的行,因此,并非所有代码都以
f05c
开头。例如,它可以是
$str=“f11dmdi-test1-name1 f09cmdi-test2-name2”更新了我的答案:)这很有效!我只需要在
$s
之前添加
mdi
。谢谢!
$input = "f05cmdi-test1-name1
f05cmdi-test2-name2";

$result = preg_replace("/.{4}(\S+)/", "'$1',", $input);
echo $result;