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:
- A lowercase letter between a and z
- An uppercase letter between A and Z
- A digit between 0 and 9
- A period
- A question mark
- An exclamation mark
- A whitespace character
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.