我在C#上使用转义符使用此正则表达式
^((?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@)))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$
或者这没有转义字符
^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`{}|~\w])*)(?<=[0-9a-z])@)).{1.64}(?([)([(\d{1,3}.){3}\d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$
我希望能够将@之前的电子邮件的第一部分限制为64个字符。我已经尝试过正面的态度,但是没有用。
答案 0 :(得分:1)
在每个(?<=^.{1,64}@)
之后立即添加@
正向后。从@
之前的字符串开始需要1到64个字符。
模式字符串看起来像
^((?(")(".+?(?<!\\)"@(?<=^.{1,64}@))|(([0-9a-z]((\.(?!\.))|[-!#$%&'*+/=?^`{}|~\w])*)@(?<=[0-9a-z]@)(?<=^.{1,64}@))))(?(\[)(\[(?:\d{1,3}\.){3}\d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$
请参见regex demo。
请注意,我将(?<=[0-9a-z])
移到了@
之后,同时向视域中添加了@
,以便仅在@
已经被匹配以简化内部匹配过程之后才执行检查。>
在逐字字符串文字中使用该字符串时,只需将双引号引起来:
var pattern = @"^((?("")("".+?(?<!\\)""@(?<=^.{1,64}@))|(([0-9a-z]((\.(?!\.))|[-!#$%&'*+/=?^`{}|~\w])*)@(?<=[0-9a-z]@)(?<=^.{1,64}@))))(?(\[)(\[(?:\d{1,3}\.){3}\d{1,3}])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][-a-z0-9]{0,22}[a-z0-9]))$";