问题

因为[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]”部分,而不是整个字符串.