Nick
Nick

Reputation: 82

Search and replace all lines in a multiline string

I have a string with a large list with items named as follows:

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

So the first 4 characters are random characters. And I would like to have an output like this:

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

As you can see the first characters from the string needs to be replaced with a ' and every line needs to end with ',

How can I change the above string into the string below? I've tried for ours with 'strstr' and 'str_replace' but I can't get it working. It would save me a lot of time if I got it work.

Thanks for your help guys!

Upvotes: 1

Views: 1221

Answers (3)

Toto
Toto

Reputation: 91385

Here is a way to do the job:

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

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

Where \S stands for a NON space character.

Upvotes: 1

Gareth Parker
Gareth Parker

Reputation: 5062

This is doable in a rather simple regex pattern

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

Alter to your more specific needs

Upvotes: 0

Rafael Lambelin
Rafael Lambelin

Reputation: 286

EDIT : I deleted the above since the following method is better and more reliable and can be used for any possible combination of four characters.

So what do I do if there are a million different possibillites as starting characters ?

In your specific example I see that the only space is in between the full strings (full string = "f05cmdi-test1-name1" )

So:

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);
}

Resulting in:

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

IF you would like a single string in the style of :

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

Then you can simply do the following:

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

Upvotes: 0

Related Questions