How to write a recursive regex that matches nested parentheses?

后端 未结 3 966
别那么骄傲
别那么骄傲 2020-11-28 12:29

I am trying to write a regexp which matches nested parentheses, e.g.:

\"(((text(text))))(text()()text)(casual(characters(#$%^^&&#^%#@!&**&#^*         


        
3条回答
  •  失恋的感觉
    2020-11-28 13:08

    When I found this answer I wasn't able to figure out how to modify the pattern to work with my own delimiters which where { and }. So my approach was to make it more generic.

    Here is a script to generate the regex pattern with your own variable left and right delimiters.

    $delimiter_wrap  = '~';
    $delimiter_left  = '{';/* put YOUR left delimiter here.  */
    $delimiter_right = '}';/* put YOUR right delimiter here. */
    
    $delimiter_left  = preg_quote( $delimiter_left,  $delimiter_wrap );
    $delimiter_right = preg_quote( $delimiter_right, $delimiter_wrap );
    $pattern         = $delimiter_wrap . $delimiter_left
                     . '((?:[^' . $delimiter_left . $delimiter_right . ']++|(?R))*)'
                     . $delimiter_right . $delimiter_wrap;
    
    /* Now you can use the generated pattern. */
    preg_match_all( $pattern, $subject, $matches );
    

提交回复
热议问题