2013-02-17 171 views
1

我想更好地理解正则表达式,但似乎无法理解这一点。为什么这个正则表达式替换了破折号字符?

preg_replace("/[^a-zA-Z0-9.?!\s]/", "", $mystring); 

我认为,这不会取代破折号,因为这将是“通过”,在上面的例子中算作。但每次运行它时,短划线都会被删除。

回答

5

您不提供样本$mystring值,这会有所帮助。

正如它所写的,这个正则表达式将替换$mystring中的一个且只有一个字符。具体来说,你的角色类别在开始时包含一个克拉字符(^)。在任何Perl兼容的正则表达式引擎(其中PHP为1)中,这表示不是这些东西(有关更多信息,请参阅character classes)。所以,你的表达实质上是剥离东西都

  • A和Z之间的小写字母
  • A和Z
  • 之间的大写字母0和9
  • 一个时期之间的一个数字
  • 问号
  • 感叹号
  • 空白字符

破折号字符是上述之一,所以它被匹配和替换。

然而,您所写的破折号“through”的假设是正确的。破折号字符是字符类中4个特殊字符之一,它用于指示一系列字符。

+0

谢谢你的完美解释。 :) – osakagreg 2013-02-17 03:45:32

相关问题