0

I'm wondering if there is a way to insert a string into another string at a specific point (in this case, near the end)? For example:

$string1 = "item one, item two, item three, item four";
$string2 = "AND";

//do something fancy here

echo $string1;

OUTPUT:
item one, item two, item three, AND item four

I need some help with the fancy string work part. Basically inserting the word after the last ", " if possible.

3 Answers 3

1

You can use preg_replace for this, and I find it to be terser than other string manipulation methods and also more easily adaptable if your use case should change:

$string1 = "item one, item two, item three, item four";
$string2 = "AND";

$pattern = "/,(?!.*,)/";
$string1 = preg_replace($pattern, ", $string2", $string1);

echo $string1;

Where you pass preg_replace a regex pattern, the replacement string, and the original string. Instead of modifying the original string, preg_replace returns a new string, so you will set $string1 equal to the output of preg_replace.

The pattern: You can use any delimiter to signal the beginning and end of the expression. Typically I see / used*, so the expression will be "/pattern/", where the pattern consists of the comma and a negative lookahead (?!) to find the comma that isn't followed by another comma. It isn't necessary to explicitly declare $pattern. You can just use the expression directly in the preg_replace arguments, but sometimes it can be just a little easier (especially for complex patterns) to separate the pattern declaration from its use.

The replacement: preg_replace is going to replace the entire match, so you need to prepend your replacement text with the comma (that's getting replaced) and a space. Since variables wrapped in double quotes are evaluated in strings, you put $string2 inside the quotes**.

The target: you just put your original string here.

* I prefer to use ~ as my delimiter, since / starts to get cumbersome when you deal with urls, but you can use anything.

Here is a cheat sheet for regex patterns, but there are plenty of these floating around. Just google regex cheat sheet if you need one.

https://www.rexegg.com/regex-quickstart.html

Also, you can find plenty of online regex testers. Here is one that includes a quick reference and also lets you switch regex engines (there are a few, and some can be just a little bit different than others):

https://regex101.com/

** I prefer to also wrap the variable in curly braces to make it more explicit that I am inserting the value, but it's optional. That would look like ", {$string2}"

Sign up to request clarification or add additional context in comments.

Comments

1

Lots of ways to do this - but since you specifically stated "after the last ," then strrpos seemed appropriate:

// insert this line where you indicate 'do something fancy here'
$string1 = substr_replace($string1, " ".$string2, strrpos($string1,",")+1, 0);

Find the right-most comma and insert the $string2 (with a space prepended) one position after it. The last parameter indicates the length of the substring to replace so a 0 means "do not replace anything but only insert."

Note the extra space added to $string2. Obviously you could modify how $string2 is initialized to include the space and eliminate this part.

Comments

1

You can use a pattern to match the last comma in the string using .*, and then use \K to forget what is matched so far.

In the replacement use AND

$string1 = "item one, item two, item three, item four";
$string2 = " AND";
$string1 =  preg_replace("/.*,\K/", $string2, $string1);
echo $string1;

Output

item one, item two, item three, AND item four

See a PHP demo.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.