正则表达式检查集合的第一个和最后一个字符是否不同

假设我只有一串a's 和b's,如下所示:

aaabbbbababab

如何构造一个正则表达式,仅当第二个和最后一个字符不同时才匹配给定的字符串?

这是我目前的尝试,正好相反(例如,如果第二个和最后一个字符相同,则匹配):

^[ab]([ab])[ab]*1$

我正在使用正则表达式的 ECMAScript 实现。

回答

您可以对第二个字符使用捕获组,并且仅在最后一个字符与捕获组 1 不同时才匹配它。

^[ab]([ab])[ab]*(?!1)[ab]$
  • ^ 字符串的开始
  • [ab]匹配 a 或 b(请注意,您可以省略,|因为它表示字符类中的管道字符
  • ([ab])捕获组 1,匹配 a 或 b
  • [ab]* 可选匹配 a 或 b
  • (?!1) 负前瞻,使用反向引用断言与组 1 中捕获的值不同 1
  • [ab]$ 匹配字符串末尾的 a 或 b

正则表达式演示

另一种选择是在捕获组之后立即进行断言

^[ab]([ab])(?![ab]*1$)[ab]*$

正则表达式演示

或者,如果支持,因为负向后视也可能有效。此页面显示了 Javascript 和lookbehinds 的兼容性

^[ab]([ab])[ab]*[ab]$(?<!1)

正则表达式演示


以上是正则表达式检查集合的第一个和最后一个字符是否不同的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>