正则表达式不匹配新行

Regular expression is not matching new lines

我有以下规则:

"^((?!([\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3})))).)*$"

但它也不匹配新行:

https://regex101.com/r/nT6wK0/1

任何想法如何在有新行时使其匹配?

和处的.其实就是

All but a line break character. (source)

换成[\S\s],就是

All spacing characters and all non-spacing characters; so all characters.

然后它似乎工作。您可以使用其他变体,例如 [\W\w][\D\d]、...

所以 "correct" 正则表达式(请不要相信我的话,首先测试一下)是:

^((?!([\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))))[\S\s])*$

regex101 demo.

假设您只想匹配第一行,您可以添加多行选项 (/m) 以包含换行符。

如果您希望包含第二行,则需要提前阅读额外的一行。你如何做到这一点取决于正则表达式引擎: N in sed;在 awk 中获取行; -n 在 perl 中; ...