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;