I'm trying to better understand regular expressions, but can't seem to understand this.
preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);
I thought that this would not replace dashes, because it would be counted as "through" in the example above. But every time I run it, the dash is removed.
You don't provide a sample $mystring
value, which would be helpful.
As it is written, this regular expression will replace one, and only one, character in $mystring
. Specifically, your character class includes a carat character (^
) at the very beginning. In any Perl-compatible regular expression engine (of which PHP is one), this indicates not these things (see character classes for more). So your expression is essentially stripping anything that is not:
The dash character is not one of the above, so it gets matched and replaced.
Your assumption about the "through"-ness of the dashes as you have written it are correct, however. The dash character is one of the 4 special characters in a character class, and it gets used to indicate a range of characters.