正则表达式不匹配新行

时间:2015-05-20 23:49:53

标签: regex unobtrusive-validation

我有以下注册表:

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

但它也不匹配新行:

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

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

2 个答案:

答案 0 :(得分:2)

.,实际上意味着

  

除了换行符之外的所有字符。 (source)

将其替换为[\S\s],意味着

  

所有间距字符和所有非间距字符;所有人物。

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

所以“正确的”正则表达式(请不要接受我的话,先测试一下)是:

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

regex101 demo

答案 1 :(得分:1)

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

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