問題

因為[a-zA-Z0-9]\S*@\S*[a-zA-Z0-9]意味著給我模式,其中@之後是零或更多非空白字元,然後是[a-zA-Z0-9]

在’[email protected]’中沒有非空白字元,即@之後的空白字元,因為*之前有\S,如果沒有非空白字元,它應該匹配.我對定義感到困惑還是什麼?

我嘗試過[a-zA-Z0-9]\S*@\S*然後它與模式’2PM @ 3PM’匹配.所以它表明它與[a-zA-Z0-9](後一個)的存在有關嗎?

任何人都可以清除這種困惑嗎?我正在嘗試學習正則表示式.

  最佳答案

我對定義或者什麼感到困惑?

從某種意義上說,您是對的. \S*確實匹配0個非空白字元,即@和空格之間.但是,這不是正則表示式的末尾,所以正則表示式引擎必須繼續檢視整個模式是否匹配.

您的模式下一步是什麼? [a-zA-Z0-9].字串中的下一步是什麼?空格.這兩件事是否匹配?不是.這就是為什麼字串不匹配正則表示式.

這也解釋了為什麼刪除[a-zA-Z0-9]會使字串匹配.在將\S*與0 non-whitespace匹配後,模式的結束會達到,因此字串匹配整個模式.但是,請注意,它只是匹配模式的“[email protected]”部分,而不是整個字串.