我想
a
,但不是 b
,A-Za-z0-9
可以包含任意次-这些字符\@\,\.
除外,只能包含一次。at least 3 characters long
。 我该如何实现?我的方法行不通,因此无法在文档中找到参考。
a='em@il';
b='em@@l';
%more examples
a2='em@il, test.'; %<- correct
a3='email, test'; %<- correct
b2='em@il, test,'; %<- incorrect 2x ','
b3='em@ail, test. @bc. %<- incorrect 2x '@'
regexp({a,b},'[A-Za-z0-9 (\@\,\.){1}]{3,}','match','once')
ans =
1×2 cell array
{'em@il'} {'em@@l'}
^(?!.*@.*@|.*,.*,)[A-Za-z0-9 @,.-]+$
如果可能支持环视,将与您的想法接近。
[如果您想简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果需要,您还可以在this link中查看它如何与某些样本输入匹配。
RegEx电路
[jex.im可视化正则表达式:来源
a-zA-Z0-9 @,.
,但使用否定的前瞻断言,.@
在正则表达式中仅匹配一次。这很容易扩展-如果要限制其他字符,只需将它们添加到第一个捕获组。[(?!.*(,|\.|@).*\1.*)
断言:如果找到,.@
之一,则在比赛中其他任何地方都不存在。
^[a-zA-Z0-9 @,\.]+$
在行的开头和结尾之间,匹配列表中的一个或多个有效字符。