如何匹配任何出现的字符,除非它出现两次?

时间:2017-03-17 17:07:48

标签: java regex regex-negation regex-lookarounds

我试图在一个术语结尾处匹配任何出现的加号,除非它恰好发生了两次。例如,c+c++++中的加号应该匹配,但c++中的不是

显然,天真的方法\+{1}$|\+{3,}$不起作用。你有更好的主意吗?

3 个答案:

答案 0 :(得分:6)

您可以使用负前瞻使用正则表达式:

\b\+(?:\+{2,})?(?!\+)

RegEx Demo

RegEx分手:

  • \b - 断言字边界
  • \+ - 匹配文字+
  • (?:\+{2,})? - 可选择匹配2个或更多+
  • (?!\+) - 否定前瞻以确保阻止+前面没有++

答案 1 :(得分:0)

我喜欢在这里构建我的正则表达式:regex builder 看起来这个人会抓住c +,而不是c ++,而c抓住3个或更多+符号

(c\+{1}|(\+){3,})

答案 2 :(得分:0)

^[^+]*(?:\+|[+]{3,})$将符合您的人为设想示例,以及c在您设计的示例中的任何位置。