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