pcredemo.c
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:3k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: pcredemo.c,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:56:28  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <pcre.h>
  12. /* Compile thuswise:
  13.   gcc -Wall pcredemo.c -I/opt/local/include -L/opt/local/lib 
  14.     -R/opt/local/lib -lpcre
  15. */
  16. #define OVECCOUNT 30    /* should be a multiple of 3 */
  17. int main(int argc, char **argv)
  18. {
  19. pcre *re;
  20. const char *error;
  21. int erroffset;
  22. int ovector[OVECCOUNT];
  23. int rc, i;
  24. if (argc != 3)
  25.   {
  26.   printf("Two arguments required: a regex and a subject stringn");
  27.   return 1;
  28.   }
  29. /* Compile the regular expression in the first argument */
  30. re = pcre_compile(
  31.   argv[1],              /* the pattern */
  32.   0,                    /* default options */
  33.   &error,               /* for error message */
  34.   &erroffset,           /* for error offset */
  35.   NULL);                /* use default character tables */
  36. /* Compilation failed: print the error message and exit */
  37. if (re == NULL)
  38.   {
  39.   printf("PCRE compilation failed at offset %d: %sn", erroffset, error);
  40.   return 1;
  41.   }
  42. /* Compilation succeeded: match the subject in the second argument */
  43. rc = pcre_exec(
  44.   re,                   /* the compiled pattern */
  45.   NULL,                 /* no extra data - we didn't study the pattern */
  46.   argv[2],              /* the subject string */
  47.   (int)strlen(argv[2]), /* the length of the subject */
  48.   0,                    /* start at offset 0 in the subject */
  49.   0,                    /* default options */
  50.   ovector,              /* output vector for substring information */
  51.   OVECCOUNT);           /* number of elements in the output vector */
  52. /* Matching failed: handle error cases */
  53. if (rc < 0)
  54.   {
  55.   switch(rc)
  56.     {
  57.     case PCRE_ERROR_NOMATCH: printf("No matchn"); break;
  58.     /*
  59.     Handle other special cases if you like
  60.     */
  61.     default: printf("Matching error %dn", rc); break;
  62.     }
  63.   return 1;
  64.   }
  65. /* Match succeded */
  66. printf("Match succeededn");
  67. /* The output vector wasn't big enough */
  68. if (rc == 0)
  69.   {
  70.   rc = OVECCOUNT/3;
  71.   printf("ovector only has room for %d captured substringsn", rc - 1);
  72.   }
  73. /* Show substrings stored in the output vector */
  74. for (i = 0; i < rc; i++)
  75.   {
  76.   char *substring_start = argv[2] + ovector[2*i];
  77.   int substring_length = ovector[2*i+1] - ovector[2*i];
  78.   printf("%2d: %.*sn", i, substring_length, substring_start);
  79.   }
  80. return 0;
  81. }