A parser for regular expressions in PHP?

后端 未结 6 1462
忘了有多久
忘了有多久 2021-02-04 01:28

I need to parse regular expressions into their components in PHP. I have no problem creating the regular expressions or executing them, but I want to display information about t

6条回答
  •  盖世英雄少女心
    2021-02-04 01:43

    The perl module YAPE::Regex::Explain module can probably be ported to PHP pretty easy. Here is an example of its output

    C:\>perl -e "use YAPE::Regex::Explain;print YAPE::Regex::Explain->new(qr/['-])->explain;"
    The regular expression:
    
    (?-imsx:['-])
    
    matches as follows:
    
    NODE                     EXPLANATION
    ----------------------------------------------------------------------
    (?-imsx:                 group, but do not capture (case-sensitive)
                             (with ^ and $ matching normally) (with . not
                             matching \n) (matching whitespace and #
                             normally):
    ----------------------------------------------------------------------
      ['-]                     any character of: ''', '-'
    ----------------------------------------------------------------------
    )                        end of grouping
    ----------------------------------------------------------------------
    
    
    
    C:\>perl -e "use YAPE::Regex::Explain; print YAPE::Regex::Explain->new(qr/(\w+), ?(.)/)->explain;"
    The regular expression:
    
    (?-imsx:(\w+), ?(.))
    
    matches as follows:
    
    NODE                     EXPLANATION
    ----------------------------------------------------------------------
    (?-imsx:                 group, but do not capture (case-sensitive)
                             (with ^ and $ matching normally) (with . not
                             matching \n) (matching whitespace and #
                             normally):
    ----------------------------------------------------------------------
      (                        group and capture to \1:
    ----------------------------------------------------------------------
        \w+                      word characters (a-z, A-Z, 0-9, _) (1 or
                                 more times (matching the most amount
                                 possible))
    ----------------------------------------------------------------------
      )                        end of \1
    ----------------------------------------------------------------------
      ,                        ','
    ----------------------------------------------------------------------
       ?                       ' ' (optional (matching the most amount
                               possible))
    ----------------------------------------------------------------------
      (                        group and capture to \2:
    ----------------------------------------------------------------------
        .                        any character except \n
    ----------------------------------------------------------------------
      )                        end of \2
    ----------------------------------------------------------------------
    )                        end of grouping
    ----------------------------------------------------------------------
    
    C:\>
    

    You can look at the source code and quickly see the implementation.

提交回复
热议问题