

Task

   match a string against a regular expression
   substitute part of a string using a regular expression


      SYS "LoadLibrary", "gnu_regex.dll" TO gnu_regex%
      IF gnu_regex% = 0 ERROR 100, "Cannot load gnu_regex.dll"
      SYS "GetProcAddress", gnu_regex%, "regcomp" TO regcomp
      SYS "GetProcAddress", gnu_regex%, "regexec" TO regexec
 
      DIM regmatch{start%, finish%}, buffer% 256
 
      REM Find all 'words' in a string:
      teststr$ = "I love PATTERN matching!"
      pattern$ = "([a-zA-Z]+)"
 
      SYS regcomp, buffer%, pattern$, 1 TO result%
      IF result% ERROR 101, "Failed to compile regular expression"
 
      first% = 1
      REPEAT
        SYS regexec, buffer%, MID$(teststr$, first%), 1, regmatch{}, 0 TO result%
        IF result% = 0 THEN
          s% = regmatch.start%
          f% = regmatch.finish%
          PRINT "<" MID$(teststr$, first%+s%, f%-s%) ">"
          first% += f%
        ENDIF
      UNTIL result%
 
      REM Replace 'PATTERN' with 'pattern':
      teststr$ = "I love PATTERN matching!"
      pattern$ = "(PATTERN)"
 
      SYS regcomp, buffer%, pattern$, 1 TO result%
      IF result% ERROR 101, "Failed to compile regular expression"
      SYS regexec, buffer%, teststr$, 1, regmatch{}, 0 TO result%
      IF result% = 0 THEN
        s% = regmatch.start%
        f% = regmatch.finish%
        MID$(teststr$, s%+1, f%-s%) = "pattern"
        PRINT teststr$
      ENDIF
 
      SYS "FreeLibrary", gnu_regex%