1
我想更好地理解正则表达式,但似乎无法理解这一点。为什么这个正则表达式替换了破折号字符?
preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);
我认为,这不会取代破折号,因为这将是“通过”,在上面的例子中算作。但每次运行它时,短划线都会被删除。
我想更好地理解正则表达式,但似乎无法理解这一点。为什么这个正则表达式替换了破折号字符?
preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring);
我认为,这不会取代破折号,因为这将是“通过”,在上面的例子中算作。但每次运行它时,短划线都会被删除。
您不提供样本$mystring
值,这会有所帮助。
正如它所写的,这个正则表达式将替换$mystring
中的一个且只有一个字符。具体来说,你的角色类别在开始时包含一个克拉字符(^
)。在任何Perl兼容的正则表达式引擎(其中PHP为1)中,这表示不是这些东西(有关更多信息,请参阅character classes)。所以,你的表达实质上是剥离东西都不:
破折号字符是不上述之一,所以它被匹配和替换。
然而,您所写的破折号“through”的假设是正确的。破折号字符是字符类中4个特殊字符之一,它用于指示一系列字符。
谢谢你的完美解释。 :) – osakagreg 2013-02-17 03:45:32