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

时间:2016-08-18 09:37:12

标签: php replace preg-replace str-replace

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

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

所以前4个字符是随机字符。我希望有这样的输出:

'mdi-test1-name1',
'mdi-test2-name2',

正如您所看到的,字符串中的第一个字符需要替换为'并且每一行都需要以'结尾',

如何将上面的字符串更改为下面的字符串?我用'strstr'和'str_replace'尝试过我们的但是我无法让它工作。如果我开始工作,这将节省我很多时间。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

这是一种完成工作的方法:

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

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

\S代表非空格字符。

答案 1 :(得分:0)

  

编辑:我删除了上述内容,因为以下方法更好,更可靠,可以用于任意四种字符的组合。

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

在您的具体示例中,我看到唯一的空格位于完整字符串之间(完整字符串= "f05cmdi-test1-name1"

所以:

str = "f05cmdi-test1-name1 f06dmdi-test2-name2";
$result_array = [];
// Split at the spaces
$result = explode(" ", $str);
foreach($result as $item) {
    // If four random chars take string after the first four random chars 
    $item = substr($item, 5); 
    $result_array = array_push($result_arrray, $item);
}

导致:

$result_array = [
    "mdi-test1-name1",
    "mdi-test2-name2",
    "....."
];

如果你想要一个风格为:

的单个字符串

"'mdi-test1-name1','mdi-test2-name2','...'"

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

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

答案 2 :(得分:0)

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

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

改变您的更具体需求