Azurewave
asked on
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.
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.
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.
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);
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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)