这是我的RegEx:
"^[^\.]([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)([\.]{0,1})([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)[^\.]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$"
我只需要匹配少于255个字符的字符串。
我尝试在RegEx的开头添加单词boundary但它失败了:
"^(?=.{1,254})[^\.]([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)([\.]{0,1})([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)[^\.]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$"
答案 0 :(得分:3)
你需要前瞻中的$来确保仅高达254.否则,即使超过254,前瞻也会匹配。
(?=.{1,254}$)
另外,请记住,您可以大大简化正则表达式,因为在字符类(方括号)中,通常需要转义的许多字符不需要。
"[\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]"
与此相同:
"[-\w!#$%&'*+/=`{|}~?^]"
请注意,短划线必须是字符类中的第一个文字短划线,并且插入符号必须不是第一个。
通过其他一些简化,这里是完整的字符串:
"^(?=.{1,254}$)[-\w!#$%&'*+/=`{|}~?^]+(\.[-\w!#$%&'*+/=`{|}~?^]+)*@((\d{1,3}\.){3}\d{1,3}|([-\w]+\.)+[a-zA-Z]{2,6})$"
注意:
我在Regex Hero中尝试过,它有效。看看它是否适合你。
答案 1 :(得分:2)
这取决于您使用的语言。例如,在Python中,您可以使用正则表达式将文本拆分为单独的字符串,然后使用len()删除长度超过您想要的255个字符的字符串
答案 2 :(得分:1)
我认为this帖子会有所帮助。它显示了如何限制某些模式,但我不确定如何将它添加到整个正则表达式。