Case insensitive Regex without using RegexOptions enumeration

后端 未结 3 1685
时光说笑
时光说笑 2020-11-30 00:53

Is it possible to do a case insensitive match in C# using the Regex class without setting the RegexOptions.IgnoreCase flag?

What I would like to be able to do is wit

3条回答
  •  死守一世寂寞
    2020-11-30 01:46

    As you already found out, (?i) is the in-line equivalent of RegexOptions.IgnoreCase.

    Just FYI, there are a few tricks you can do with it:

    Regex:
        a(?i)bc
    Matches:
        a       # match the character 'a'
        (?i)    # enable case insensitive matching
        b       # match the character 'b' or 'B'
        c       # match the character 'c' or 'C'
    
    Regex:
        a(?i)b(?-i)c
    Matches:
        a        # match the character 'a'
        (?i)     # enable case insensitive matching
        b        # match the character 'b' or 'B'
        (?-i)    # disable case insensitive matching
        c        # match the character 'c'
    
    Regex:    
        a(?i:b)c
    Matches:
        a       # match the character 'a'
        (?i:    # start non-capture group 1 and enable case insensitive matching
          b     #   match the character 'b' or 'B'
        )       # end non-capture group 1
        c       # match the character 'c'
    

    And you can even combine flags like this: a(?mi-s)bc meaning:

    a          # match the character 'a'
    (?mi-s)    # enable multi-line option, case insensitive matching and disable dot-all option
    b          # match the character 'b' or 'B'
    c          # match the character 'c' or 'C'
    

提交回复
热议问题