2013-02-17 169 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

相關問題