• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 346
  • Last Modified:

Replace words in string

I have documents, and there are certain words in those documents that I want to replace with a new word.

for example, I want to replace all instances of

dog with cat.

I know I can do a str_replace and this will do it for me, however I run into an issue where it would replace "hotdog" with "hotcat", which is something I do not want to do.  So str_replace is not an option.

Some of the words, also have an apostrophe in them, so I would like to take those into account as well.
  • 2
1 Solution
You would want to use a regular expression (regex), and the preg_replace function.

We basically make an array of the things we want to find, then run them through preg_replace.
You may want to do some research into regex, but basically it uses characters to represent things; for example, "?" means "if there is 1 or 0 instances of the previous character". So if you are looking for something like
"it's" and "its", then you could do a search for "it'?s" (it will match strings with both the ' and without).

I don't have an incredibly good grasp on regex, but I believe \b defines a word boundary between anything encased in it. So if you were searching "\bit'?s\b" in "it's like a little bit of its own flavour", it would find "it's", and "its", but not the "its" in "bits".

Hopefully I explained that properly. You could take a look at http://www.regular-expressions.info/wordboundaries.html (or http://www.regular-expressions.info/wordboundaries.html for more info on the \b tag)
Whoops, I forgot to show you that in practise. In PHP, the regex values must be between / tags to signify they are regex.  In the example we'll replace "it's", and "its" (by searching "it'?s"), "dog", and both "cat" and "cats" (by searching "cats?").
I also forgot to note that anything in the searching expression can be back-tracked by putting it in brackets. That is to say, if you search for "cat(s?)", you can reference what's inside of the brackets as $1 (or whatever number the bracket is at).

I've provded an example below, but I'm at work right now, so unfortunately I don't have time to test it, so it may need some tweaking.
$search = array('/\bit'?s\b/', '/\bdog\b/', '/\bcat(s?)\b/'); //What to replace
$replace = array('it is', 'cat', 'dog$1');
$old_string = "$_POST['text']";
$new_string = preg_replace($search, $replace, $old_string);

Open in new window


$content = 'dog my dog hotdog dog\'s place the dog123 67dog77 dog and only dog';
$content = preg_replace('/(\W)dog(\W)/i', '$1cat$2', $content);  ## repalce from middle
$content = preg_replace('/^dog(\W)/i', 'cat$1', $content);  ## repalce from first
$content = preg_replace('/(\W)dog$/i', '$1cat', $content);  ## repalce from last
print "$content\n";

Open in new window

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now