We can use regular expressions to specify a list characters we want to either strip out of a string or replace them with other characters however this article is aimed more on how to do a regex reverse match and replace (also knows as a negative replace) where we specify the characters we DO NOT want to be stripped out which can be very useful for sanitising and cleaning out strings and prevent MySQL injections or cross-site scripting attacks. In other words we replace everything but the string specified.
Sounds simple enough yet I found it ever so difficult on how to perform this which is why I am posting it here to save others the time.
Regex Reverse Match
The below examples use the regular expression pattern /[^a-zA-Z0-9\s]/ which basically is just specifying a list of characters (being upper and lower case letters, numbers and spaces). But the big difference is the ^ (caret symbol) is inside the square brackets which tells the regular expression that it is a negative search. ie, match and strip all but the ones listed.
Remember… if we wanted to remove the list of characters specified by the expression’s pattern, then we simply exclude the ^ which mean the resulting pattern to include a list of characters would look like so: /[a-zA-Z0-9]/.
Secondly the second parameter is and empty string which will tell the function to replace the string with nothing.
Note! that if the ^ (caret) was outside the square brackets it would then specify matches at the beginning of a sentence. Just as a $ (dollar symbol) at the end of the sentence would specify matches at the end of the sentence. In this case, the ^ (caret) is inside which denotes an exclusion of characters.
PHP Reverse Replace
<?php /* our string we will be working on */ $str = "A string - with, awful characters$@!."; /* use php's preg_replace to execute the regular expression and echo the result */ echo preg_replace( '/[^a-zA-Z0-9\s]/', '', $str ); /* the output from the above will be "A string with awful characters" */ ?>