regex 1.1.8

An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs.
Documentation
matiter!(match_multi_1, r"(?m)^[a-z]+$", "abc\ndef\nxyz",
         (0, 3), (4, 7), (8, 11));
matiter!(match_multi_2, r"(?m)^$", "abc\ndef\nxyz");
matiter!(match_multi_3, r"(?m)^", "abc\ndef\nxyz",
         (0, 0), (4, 4), (8, 8));
matiter!(match_multi_4, r"(?m)$", "abc\ndef\nxyz",
         (3, 3), (7, 7), (11, 11));
matiter!(match_multi_5, r"(?m)^[a-z]", "abc\ndef\nxyz",
         (0, 1), (4, 5), (8, 9));
matiter!(match_multi_6, r"(?m)[a-z]^", "abc\ndef\nxyz");
matiter!(match_multi_7, r"(?m)[a-z]$", "abc\ndef\nxyz",
         (2, 3), (6, 7), (10, 11));
matiter!(match_multi_8, r"(?m)$[a-z]", "abc\ndef\nxyz");
matiter!(match_multi_9, r"(?m)^$", "", (0, 0));

matiter!(match_multi_rep_1, r"(?m)(?:^$)*", "a\nb\nc",
         (0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5));
matiter!(match_multi_rep_2, r"(?m)(?:^|a)+", "a\naaa\n",
         (0, 0), (2, 2), (3, 5), (6, 6));
matiter!(match_multi_rep_3, r"(?m)(?:^|a)*", "a\naaa\n",
         (0, 1), (2, 5), (6, 6));
matiter!(match_multi_rep_4, r"(?m)(?:^[a-z])+", "abc\ndef\nxyz",
         (0, 1), (4, 5), (8, 9));
matiter!(match_multi_rep_5, r"(?m)(?:^[a-z]{3}\n?)+", "abc\ndef\nxyz",
         (0, 11));
matiter!(match_multi_rep_6, r"(?m)(?:^[a-z]{3}\n?)*", "abc\ndef\nxyz",
         (0, 11));
matiter!(match_multi_rep_7, r"(?m)(?:\n?[a-z]{3}$)+", "abc\ndef\nxyz",
         (0, 11));
matiter!(match_multi_rep_8, r"(?m)(?:\n?[a-z]{3}$)*", "abc\ndef\nxyz",
         (0, 11));
matiter!(match_multi_rep_9, r"(?m)^*", "\naa\n",
         (0, 0), (1, 1), (2, 2), (3, 3), (4, 4));
matiter!(match_multi_rep_10, r"(?m)^+", "\naa\n",
         (0, 0), (1, 1), (4, 4));
matiter!(match_multi_rep_11, r"(?m)$*", "\naa\n",
         (0, 0), (1, 1), (2, 2), (3, 3), (4, 4));
matiter!(match_multi_rep_12, r"(?m)$+", "\naa\n",
         (0, 0), (3, 3), (4, 4));
matiter!(match_multi_rep_13, r"(?m)(?:$\n)+", "\n\naaa\n\n",
         (0, 2), (5, 7));
matiter!(match_multi_rep_14, r"(?m)(?:$\n)*", "\n\naaa\n\n",
         (0, 2), (3, 3), (4, 4), (5, 7));
matiter!(match_multi_rep_15, r"(?m)(?:$\n^)+", "\n\naaa\n\n",
         (0, 2), (5, 7));
matiter!(match_multi_rep_16, r"(?m)(?:^|$)+", "\n\naaa\n\n",
         (0, 0), (1, 1), (2, 2), (5, 5), (6, 6), (7, 7));
matiter!(match_multi_rep_17, r"(?m)(?:$\n)*", "\n\naaa\n\n",
         (0, 2), (3, 3), (4, 4), (5, 7));