demo_regerror.f90 Source File


Source Code

     program demo_regerror
     use M_regex, only: regex_type, regcomp, regexec, regmatch, regfree, regerror
     implicit none
     type(regex_type)             :: regex
     integer,parameter            :: maxmatch=10
     integer                      :: matches(2,maxmatch)
     integer                      :: i, istat

     character(len=:),allocatable :: input_line
     character(len=:),allocatable :: expression
     logical                      :: match

        expression= "([0-9\.\-\*\/]+)+"
        expression= "([0-9\.\-\*\/+)+"  ! intentionally bad RE (Regular Expression)
        input_line= "30*0 250*1 5 6 7"
        call regcomp(regex,expression,'x',status=istat)
        if (istat/=0) then
          write(*,'("Regex runtime error in regcomp(3f):",a,", expression=",a)') regerror(regex,istat),expression
          stop 1
        endif
        match=regexec(regex,input_line,matches,status=istat)
        if (istat/=0) then
          write(*,'("Regex runtime error in regexec:(3f)",a)') regerror(regex,istat)
          stop 2
        endif
        if(match)then
           do i=1,maxmatch
              if(matches(1,i).le.0)exit
              write(*,*) 'match="',regmatch(i,input_line,matches),'"'
           enddo
        endif
        call regfree(regex)

     end program demo_regerror