Regex with all optional parts but at least one required

前端 未结 4 582
我寻月下人不归
我寻月下人不归 2020-12-22 02:03

I need to write a regex that matches strings like \"abc\", \"ab\", \"ac\", \"bc\", \"a\", \"b\", \"c\". Order is important and it shouldn\'t match multiple appearances of th

相关标签:
4条回答
  • 2020-12-22 02:09
    ^(?=.)a?b?c?$
    

    This will check if there is at least one character with lookahead and will match your regex.

    0 讨论(0)
  • 2020-12-22 02:11

    To do this with pure regex you're going to have to expand it into all of its possibilities:

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

    If you have lookaheads you can make sure the string is non-empty. Or you can verify the string has a length of at least one before passing it to the expression, depending on your choice of language.

    For example a .NET lookahead might look like this:

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

    Or you could just test your string's length before matching it:

    if (YourString.Length == 1) {
       // matching code goes here, using the expression a?b?c?
    }
    
    0 讨论(0)
  • 2020-12-22 02:12

    It is pointless to try to pack all functionality of all problems you ever have into one single regexp. The best solution is to write the obvious regex, and add a check against zero length. You should only get extra clever with regexps when you absolutely have to - for instance if you have to interact with an unchangeable API that accepts only one regexp and nothing more.

    0 讨论(0)
  • You can write down all permutations (which is a pain) or all possibilities of which letter is not left out (ab?c?|a?bc?|a?b?c), which is somewhat less of a pain.

    0 讨论(0)
提交回复
热议问题