- if ((n->rx = pcre_compile(av[0], PCRE_CASELESS, &e, &eo, 0)) == 0)
- die("bad regular expression `%s': %s", av[0], e);
+
+#ifdef HAVE_PCRE2
+ n->rx = pcre2_compile((PCRE2_SPTR)av[0], strlen(av[0]), PCRE2_CASELESS,
+ &err, &eo, 0);
+ if (!n->rx) {
+ err = pcre2_get_error_message(err, (PCRE2_UCHAR *)buf, sizeof(buf));
+ assert(!err); die("bad regular expression `%s': %s", av[0], buf);
+ }
+ err = pcre2_pattern_info(n->rx, PCRE2_INFO_BACKREFMAX, &c);
+ assert(!err);
+ n->m = pcre2_match_data_create_from_pattern(n->rx, 0);
+ if (!n->m) {
+ err = pcre2_get_error_message(err, (PCRE2_UCHAR *)buf, sizeof(buf));
+ assert(!err); die("failed to allocate match data: %s", buf);
+ }
+ pcre2_jit_compile(n->rx, PCRE2_JIT_COMPLETE);
+#endif
+#ifdef HAVE_PCRE
+ n->rx = pcre_compile(av[0], PCRE_CASELESS, &e, &eo, 0);
+ if (!n->rx) die("bad regular expression `%s': %s", av[0], e);