如何创建包含1 2和3的所有字符串且不超过4个2的正则表达式?

时间:2014-01-29 06:02:48

标签: regex

我正在寻找这样的事情:1 * 2 4 3 *

但是这并没有考虑到字符串231等不同的顺序。任何想法如何使用正则表达式指定顺序?

2 个答案:

答案 0 :(得分:1)

我不知道你对1^* 2^4 3^*的意图是什么,但是从你的描述开始,

/^([13]*2){0,4}[13]*$/

将匹配123的任意组合,但2不超过四个。

但是,您没有指定regexp引擎,因此它可能在某些引擎中不起作用(特别是那些没有{}重复运算符的引擎),在这种情况下,您需要将其解压缩。

编辑:看过tripleee的评论后,我终于理解了原来的尝试。无论如何,在正式的正则表达式中,你肯定需要解压缩(不仅你没有{},你甚至没有x?作为(x|ε)的简写:

(1|3)*
(2 (1|3)*
  (2 (1|3)*
    (2 (1|3)*
      (2 (1|3)*
      |ε)
    |ε)
  |ε)
|ε)

答案 1 :(得分:0)

如果我正确理解了您的要求,您希望允许1,2,3的所有组合限制数字2不应超过4次。

你需要为这个正则表达式使用前瞻:

^(?!(.*?2){5,})[123]+$

在线演示:http://regex101.com/r/dP2bK3