How to match double quote or single quote or unquoted with regular expression?

前端 未结 3 510
后悔当初
后悔当初 2021-01-14 09:34

I am trying to grab sometext from all three types of inputs, but can\'t figure out how to deal with the unquoted case.

So far I have:

name=[\'\"](.         


        
相关标签:
3条回答
  • 2021-01-14 10:04

    It looks like you are a C# developer, so you can use the first matching group to ensure it is closed off with the same quote (and thus support phrase="Don't forget apostrophes").

    Regex regex1 = new Regex(@"=(?:(['""])(.*?)\1|.*)");
    
    string text = @" 
    name=""don't forget me""
    name='sometext'
    name='sometext'
    name=sometext
    ";
    
    foreach (Match m in regex1.Matches(text))
       Console.WriteLine (m.Groups[2].Value);
    
    0 讨论(0)
  • 2021-01-14 10:07

    Without knowing what could be after 'name=asdf', assume its whitespace or nothing
    that delimits the end.

    name= 
    (?:
         (['"])((?:(?!\1).)*)\1    # (1,2)
     |   (\S*)                     # (3)
    )
    

    Answer is $2 catted with $3

    0 讨论(0)
  • 2021-01-14 10:10

    I would use the OR operator | to specify the three cases separatly:

    ('[^'"]*')|("[^'"]*")|([^'"]*)
    

    Depending on the regex dialect you are using, you have to define non matching groups separated by the OR operators, and matching groups for the words [^'"]*.

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