matlab正则表达式,匹配任意字符X次

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

我想

  • 匹配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
3个回答
2
投票
^(?!.*([,.@]).*\1)[a-zA-Z0-9 @,.]{3,}$

部分

[^字符串的开头

    (?!负前瞻,如果右边没有
  • [.*([,.@])在组1中捕获, .@
    • [.*\1使用后向引用匹配在组1中捕获的内容
  • )关闭前瞻
  • [[a-zA-Z0-9 @,.]{3,}匹配列出的3次以上]
  • [$字符串结尾
  • Regex demo

  • 2
    投票
    ^(?!.*@.*@|.*,.*,|.*\..*\.)[A-Za-z0-9 @,.]{3,}$

    如果我理解正确的话,它将接近您的想法。

    Demo

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

    RegEx电路


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

    enter image description here

    来源

    MATLAB Regular Expressions


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

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

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