正则表达式((MM)* N {1,3})|((N {1,3})(MM)*)与我认为的不匹配

时间:2016-04-09 23:21:16

标签: regex

我正在尝试编写一个正则表达式,以任意顺序连续匹配Ms和最多3 Ns

  • MMMMNN匹配
  • MMNNN会匹配
  • NNNMM会匹配
  • NMMMM也匹配

我使用了以下正则表达式:

((MM)*N{1,3})|(N{1,3}(MM)*)

每个术语都单独匹配,但是当我将|放在它们之间时,似乎并不匹配两种可能性。我用http://regex101.com/来测试它。

正则表达式会匹配哪些?

2 个答案:

答案 0 :(得分:2)

这与您拥有的所有示例相符:

(N{1,3}(MM)+)|((MM)+N{1,3})

但问题是,如果'最多3'应该包含zero个实例?

修改:评论正确,删除了额外的加号。

答案 1 :(得分:1)

这对你有用吗?

(MMN{0,3})|(N{0,3}MM)