代码之家  ›  专栏  ›  技术社区  ›  Alan Mendelevich

带有所有可选部分但至少需要一个的Regex

  •  1
  • Alan Mendelevich  · 技术社区  · 14 年前

    我需要写一个正则表达式来匹配像“abc”,“ab”,“ac”,“bc”,“a”,“b”,“c”这样的字符串。顺序很重要,它不应该匹配同一零件的多个外观。

    a?b?c?几乎成功了。但它也匹配空字符串。有没有什么方法可以阻止它匹配空字符串,或者有没有其他方法可以为任务编写regex。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Welbog    14 年前

    要使用纯regex实现这一点,您必须将其扩展到所有可能的方面:

    ab?c?|a?bc?|a?b?c
    

    如果你有lookaheads,你可以确保字符串是非空的。或者,在将字符串传递给表达式之前,可以验证字符串的长度是否至少为1,具体取决于您选择的语言。

    ^(?=[abc])a?b?c?$
    

    或者你可以在匹配字符串之前测试它的长度:

    if (YourString.Length == 1) {
       // matching code goes here, using the expression a?b?c?
    }
    
        2
  •  6
  •   Thexa4    14 年前
    ^(?=.)a?b?c?$
    

    这将检查是否至少有一个字符具有lookahead,并将匹配您的正则表达式。

        3
  •  0
  •   sepp2k    14 年前

    ab?c?|a?bc?|a?b?c ),这就不那么痛苦了。

        4
  •  -1
  •   Kilian Foth    14 年前

    只有