2 * Test program for testing regular expressions.
5 Copyright (C) 2006 Kern Sibbald
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 version 2 as amended with additional clauses defined in the
10 file LICENSE in the main source directory.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 the file LICENSE for additional details.
24 #include "lib/bregex.h"
28 #include "lib/bregex.h"
40 "Usage: bregex [-d debug_level] -f <data-file>\n"
41 " -f specify file of data to be matched\n"
42 " -l suppress line numbers\n"
43 " -n print lines that do not match\n"
44 " -? print this message.\n"
51 int main(int argc, char *const *argv)
60 bool match_only = true;
62 bool no_linenos = false;
65 setlocale(LC_ALL, "");
66 bindtextdomain("bacula", LOCALEDIR);
69 while ((ch = getopt(argc, argv, "d:f:n?")) != -1) {
71 case 'd': /* set debug level */
72 debug_level = atoi(optarg);
73 if (debug_level <= 0) {
100 printf("A data file must be specified.\n");
105 printf("Enter regex pattern: ");
106 if (fgets(pat, sizeof(pat)-1, stdin) == NULL) {
109 strip_trailing_newline(pat);
113 rc = regcomp(&preg, pat, REG_EXTENDED);
115 regerror(rc, &preg, prbuf, sizeof(prbuf));
116 printf("Regex compile error: %s\n", prbuf);
119 fd = fopen(fname, "r");
121 printf(_("Could not open data file: %s\n"), fname);
125 while (fgets(data, sizeof(data)-1, fd)) {
126 const int nmatch = 30;
127 regmatch_t pmatch[nmatch];
128 strip_trailing_newline(data);
130 rc = regexec(&preg, data, nmatch, pmatch, 0);
131 if ((match_only && rc == 0) || (!match_only && rc != 0)) {
133 printf("%s\n", data);
135 printf("%5d: %s\n", lineno, data);