Skip to content

Dynamically created regular expressions need to be converted at runtime from perl style to python style #366

@snoopyjc

Description

@snoopyjc

Dynamically created regular expressions need to be converted at runtime from perl style to python style. For example (from Date::Manip::Date):

  my $y4  = '(?<y>\d\d\d\d)';
  my $y2  = '(?<y>\d\d)';
  my $m   = '(?<m>0[1-9]|1[0-2])';
  my $d   = '(?<d>0[1-9]|[12][0-9]|3[01])';
  my $doy = '(?<doy>00[1-9]|0[1-9][0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])';
  my $w   = '(?<w>0[1-9]|[1-4][0-9]|5[0-3])';
  my $dow = '(?<dow>[1-7])';
  my $yod = '(?<yod>\d)';
  my $cc  = '(?<c>\d\d)';

  my @cdaterx =
    (
     "${y4}${m}${d}",               # CCYYMMDD
     "${y4}\\-${m}\\-${d}",         # CCYY-MM-DD
     "\\-${y2}${m}${d}",            # -YYMMDD
     "\\-${y2}\\-${m}\\-${d}",      # -YY-MM-DD
     "\\-?${y2}${m}${d}",           # YYMMDD
     "\\-?${y2}\\-${m}\\-${d}",     # YY-MM-DD
     "\\-\\-${m}\\-?${d}",          # --MM-DD   --MMDD
     "\\-\\-\\-${d}",               # ---DD

     "${y4}\\-?${doy}",             # CCYY-DoY  CCYYDoY
     "\\-?${y2}\\-?${doy}",         # YY-DoY    -YY-DoY
                                    # YYDoY     -YYDoY
     "\\-${doy}",                   # -DoY

     "${y4}W${w}${dow}",            # CCYYWwwD
     "${y4}\\-W${w}\\-${dow}",      # CCYY-Www-D
     "\\-?${y2}W${w}${dow}",        # YYWwwD    -YYWwwD
     "\\-?${y2}\\-W${w}\\-${dow}",  # YY-Www-D  -YY-Www-D

     "\\-?${yod}W${w}${dow}",       # YWwwD     -YWwwD
     "\\-?${yod}\\-W${w}\\-${dow}", # Y-Www-D   -Y-Www-D
     "\\-W${w}\\-?${dow}",          # -Www-D    -WwwD
     "\\-W\\-${dow}",               # -W-D
     "\\-\\-\\-${dow}",             # ---D
    );
  my $cdaterx = join('|',@cdaterx);
  $cdaterx = qr/(?:$cdaterx)/i;

All the (?<NAME>...) constructs need to be changed to <?P<NAME>...).

Also: /hello\Z/ and /hello\z/ regexes generate bad code.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions