正则表达式不匹配序列中的两个相同字符

Regular expression to not to match two same character in the sequence

本文关键字:两个 字符 不匹配 正则表达式      更新时间:2023-09-26

我知道这对你们来说很简单,但我很难在下面的字符串中找到匹配的正则表达式。尝试过不同的reg ex,但每次都失败了。以下是需要匹配/不匹配的字符串。

S__ATHEESH – not match
S_A_T_HEESH – match 
S’_ATHEESH – match 
S’’ATHEESH – not match
S-A_THEESH - match

这是的要求

a.       A name can have the special characters – space, apostrophe, underscore and hyphen. 
b.      There can be more than 1 special character in a name, but same special character cannot repeat more than once continuously. 
c.       There should be minimum 2 characters entered in the name field 

我有下面的reg ex,需要修改

^([a-zA-Z]+[ _'-])*[a-zA-Z]+$

谢谢你的帮助。

以下正则表达式将满足您的要求:

^(?=.{2})(?:[a-zA-Z]+|([ _’'-])(?!'1))+$
  • ^断言字符串开头的位置
  • (?=.{2})至少2个字符
  • 和(:
    • [a-zA-Z]+至少一个字母字符
  • 或:
    • ([ _’'-])在捕获组1中捕获的空格、下划线、魔撇号、撇号或破折号
    • (?!'1)否定地认为刚刚捕捉到的不是下一个角色
  • )+尽可能多次
  • $断言字符串末尾的位置

演示

您可以使用类似的基于前瞻性的解决方案

/^(?!.*([-_ ’])'1)(?=(?:[^a-z]*[a-z]){2})[-_ ’a-z]+$/i
  • (?!.*([-_ ’])'1)检查,没有双重特殊字符
  • (?=(?:[^a-z]*[a-z]){2})检查是否存在至少两个字母
  • 如果仅存在允许的字符,则^[-_ ’a-z]+$匹配

为了避免一直写a-zA-Z,我使用了case insenstive修饰符。我不确定是正确的连字符,但它就是您使用的那个。

下面是一个演示:https://regex101.com/r/fD1gV0/1

如果我错了,请纠正我,但您的要求只是不包含2个空格(或撇号、下划线或连字符)的字符串。

在RegEx地区,AFAICT,断言"不是"并不简单,但要求似乎足够简单,可以反过来处理:

(  |__|''|’’)

将匹配您标记为"不匹配"的内容,所以您只需要否定布尔匹配结果。

祝你好运。

编辑:只是为了确保我没有被误解。我并不是说你不能完全按照手术的要求去做,我只是说否定这个要求要简单得多,更容易由其他人来维护。