?? gnu_regex_test.c
字號:
#include <stdio.h>#include <regex.h>intgnu_regex (regex_pattern, line1, line2) char *regex_pattern; char *line1; char *line2;{ struct re_pattern_buffer pattern_buffer; struct re_registers regs; int n, len1, len2; const char *id; len1 = strlen (line1); len2 = strlen (line2); /* 設定 正則表達式 的語法定義 */ re_syntax_options = RE_SYNTAX_EGREP | RE_INTERVALS | RE_BACKSLASH_ESCAPE_IN_LISTS; /* 將 正則表達式 的 pattern buffer 初始化 */ pattern_buffer.allocated = 0; pattern_buffer.buffer = 0; pattern_buffer.fastmap = 0; pattern_buffer.translate = 0; /* 編譯 正則表達式 */ id = re_compile_pattern (regex_pattern, strlen (regex_pattern), &pattern_buffer); /* 偵測是否有錯誤的發生 */ if (id != NULL) { printf (" error on compiling regex1. code = %s\n", id); exit (1); } /* 在字符串 line1 中進行比較,并列出其返回值 */ n = re_match (&pattern_buffer, line1, len1, 0, ®s); printf (" re_match return = %d\n", n); /* 在字符串 line1 與字符串 line2 中進行比較,并列出其返回值 */ n = re_match_2 (&pattern_buffer, line1, len1, line2, len2, 0, ®s, len1 + len2); printf (" re_match_2 return = %d\n", n); /* 在字符串 line1 中進行尋找,并列出其返回值 */ n = re_search (&pattern_buffer, line1, len1, 0, len1, ®s); printf (" re_search return = %d\n", n); if (n >= 0) printf (" re_search string = %s\n", line1); /* 在字符串 line1 與字符串 line2 中進行尋找,并列出其返回值 */ n = re_search_2 (&pattern_buffer, line1, len1, line2, len2, 0, len1 + len2, ®s, len1 + len2); if (n >= 0) { printf (" re_search_2 return = %d\n", n); if (n < len1) printf (" re_search_2 string = %s\n", line1); else printf (" re_search_2 string = %s\n", line2); return 1; } printf (" re_search_2 return = %d\n", n); return n;}main (argc, argv) int argc; char **argv;{ FILE *fp; char line[2][1024]; int i, n, k, j; /* 檢查參數的個數 */ if (argc != 3) { printf ("Usage: %s pattern file\n", argv[0]); exit (1); } /* 打開測試的文件 */ fp = fopen (argv[2], "r"); if (fp == NULL) { fprintf (stderr, "Can't open %s.\n", argv[2]); exit (1); } /* 讀取測試文件中的字符串并進行 GNU 接口 Regex 程序的測試 */ j = 1; fgets (line[0], 1024, fp); i = strlen (line[0]) - 1; if (line[0][i] == '\n') { line[0][i] = '\0'; } while (1) { n = j & 1; k = n ^ 1; if (fgets (line[n], 1024, fp) == NULL) { break; } j++; i = strlen (line[n]) - 1; if (line[n][i] == '\n') { line[n][i] = '\0'; } gnu_regex (argv[1], line[k], line[n]); } line[n][0] = '\0'; gnu_regex (argv[1], line[k], line[n]); /* 關閉測試的文件 */ fclose (fp);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -