正则表达式不匹配新行
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])*$
假设您只想匹配第一行,您可以添加多行选项 (/m) 以包含换行符。
如果您希望包含第二行,则需要提前阅读额外的一行。你如何做到这一点取决于正则表达式引擎: N in sed;在 awk 中获取行; -n 在 perl 中; ...
我有以下规则:
"^((?!([\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])*$
假设您只想匹配第一行,您可以添加多行选项 (/m) 以包含换行符。
如果您希望包含第二行,则需要提前阅读额外的一行。你如何做到这一点取决于正则表达式引擎: N in sed;在 awk 中获取行; -n 在 perl 中; ...