我有一个包含大型列表的字符串,其中的项目名称如下:
str = "f05cmdi-test1-name1
f06dmdi-test2-name2";
所以前4个字符是随机字符。我希望有这样的输出:
'mdi-test1-name1',
'mdi-test2-name2',
正如您所看到的,字符串中的第一个字符需要替换为'并且每一行都需要以'结尾',
如何将上面的字符串更改为下面的字符串?我用'strstr'和'str_replace'尝试过我们的但是我无法让它工作。如果我开始工作,这将节省我很多时间。
感谢您的帮助!
答案 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;
改变您的更具体需求