我正在努力更好地理解正则表达式,但似乎无法理解这一点。
preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);
我认为这不会取代破折号,因为在上面的示例中它将被视为“通过”。但每次我运行它时,短划线都会被移除。
答案 0 :(得分:5)
您没有提供示例$mystring
值,这会有所帮助。
正如所写的那样,这个正则表达式将替换$mystring
中的一个且只有一个字符。具体来说,您的角色类在一开始就包含一个克拉字符(^
)。在任何与Perl兼容的正则表达式引擎(其中PHP是一个)中,这表示不是这些东西(有关更多信息,请参阅character classes)。因此,您的表达基本上剥离了不:
短划线字符不以上之一,因此匹配并替换。
然而,你所写的破折号的“通过”的假设是正确的。短划线字符是字符类中的4个特殊字符之一,它用于指示一系列字符。