我有以下注册表:
"^((?!([\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*@((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3})))).)*$"
但它也不匹配新行:
https://regex101.com/r/nT6wK0/1
有任何想法如何在有新行时使其匹配?
答案 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])*$
答案 1 :(得分:1)
假设您只想匹配第一行,可以添加多行选项(/ m)以包含换行符。
如果你想要包含第二行,你需要提前读一行。你如何做到这一点取决于正则表达式引擎:在sed中的N; getk in awk; -n in perl; ...