matlab regexp,任意字符X次

问题描述 投票:1回答:2

我想

  • 匹配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'}
regex matlab
2个回答
0
投票
^(?!.*@.*@|.*,.*,)[A-Za-z0-9 @,.-]+$

如果可能支持环视,将与您的想法接近。

[如果您想简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果需要,您还可以在this link中查看它如何与某些样本输入匹配。


RegEx电路


[jex.im可视化正则表达式:

enter image description here

来源

MATLAB Regular Expressions


0
投票
此正则表达式允许匹配任意数量的a-zA-Z0-9 @,.,但使用否定的前瞻断言,.@在正则表达式中仅匹配一次。这很容易扩展-如果要限制其他字符,只需将它们添加到第一个捕获组。

[(?!.*(,|\.|@).*\1.*)断言:如果找到,.@之一,则在比赛中其他任何地方都不存在。

    ^[a-zA-Z0-9 @,\.]+$在行的开头和结尾之间,匹配列表中的一个或多个有效字符。
  • Demo
  • © www.soinside.com 2019 - 2024. All rights reserved.