test_simple_repeats.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 439 行 · 第 1/2 页
CPP
439 行
/* * * Copyright (c) 2004 * John Maddock * * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) * */#include "test.hpp"#ifdef BOOST_MSVC#pragma warning(disable:4127)#endifvoid test_simple_repeats2();void test_simple_repeats(){ using namespace boost::regex_constants; // simple repeats: TEST_REGEX_SEARCH("a*", perl, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); TEST_REGEX_SEARCH("ab*", perl, "ab", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("ab*", basic, "ab", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("ab*", perl, "sssabbbbbbsss", match_default, make_array(3, 10, -2, -2)); TEST_REGEX_SEARCH("ab*c*", perl, "a", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("ab*c*", perl, "abbb", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("ab*c*", perl, "accc", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("ab*c*", perl, "abbcc", match_default, make_array(0, 5, -2, -2)); TEST_REGEX_SEARCH("*a", basic, "*a", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("^*a", basic, "*a", match_default, make_array(0, 2, -2, -2)); TEST_INVALID_REGEX("*a", perl); TEST_INVALID_REGEX("\\<*", perl); TEST_INVALID_REGEX("\\>*", perl); TEST_REGEX_SEARCH("\n*", perl, "\n\n", match_default, make_array(0, 2, -2, 2, 2, -2, -2)); TEST_REGEX_SEARCH("\\**", perl, "**", match_default, make_array(0, 2, -2, 2, 2, -2, -2)); TEST_REGEX_SEARCH("\\*", perl, "*", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("(ab)*", perl, "abab", match_default, make_array(0, 4, 2, 4, -2, 4, 4, -2, -2)); TEST_INVALID_REGEX("(*)", perl); TEST_INVALID_REGEX("(*)", boost::regex::extended); TEST_INVALID_REGEX("\\(*\\)", basic); TEST_INVALID_REGEX("^*", perl); TEST_INVALID_REGEX("^*", boost::regex::extended); TEST_INVALID_REGEX("$*", perl); TEST_INVALID_REGEX("$*", boost::regex::extended); TEST_INVALID_REGEX("$*", basic); TEST_INVALID_REGEX("\\b*", perl); TEST_INVALID_REGEX("\\B*", perl); TEST_INVALID_REGEX("\\A*", perl); TEST_INVALID_REGEX("\\z*", perl); TEST_INVALID_REGEX("\\Z*", perl); TEST_INVALID_REGEX("\\A*", perl); TEST_INVALID_REGEX("a|*", perl); TEST_INVALID_REGEX("a|*", boost::regex::extended); TEST_INVALID_REGEX("(+)", perl); TEST_INVALID_REGEX("(+)", boost::regex::extended); TEST_INVALID_REGEX("^+", perl); TEST_INVALID_REGEX("^+", boost::regex::extended); TEST_INVALID_REGEX("$+", perl); TEST_INVALID_REGEX("$+", boost::regex::extended); TEST_INVALID_REGEX("\\b+", perl); TEST_INVALID_REGEX("\\B+", perl); TEST_INVALID_REGEX("\\A+", perl); TEST_INVALID_REGEX("\\z+", perl); TEST_INVALID_REGEX("\\Z+", perl); TEST_INVALID_REGEX("\\A+", perl); TEST_INVALID_REGEX("a|+", perl); TEST_INVALID_REGEX("a|+", boost::regex::extended); TEST_INVALID_REGEX("(?)", perl); TEST_INVALID_REGEX("(?)", boost::regex::extended); TEST_INVALID_REGEX("^?", perl); TEST_INVALID_REGEX("^?", boost::regex::extended); TEST_INVALID_REGEX("$?", perl); TEST_INVALID_REGEX("$?", boost::regex::extended); TEST_INVALID_REGEX("\\b?", perl); TEST_INVALID_REGEX("\\B?", perl); TEST_INVALID_REGEX("\\A?", perl); TEST_INVALID_REGEX("\\z?", perl); TEST_INVALID_REGEX("\\Z?", perl); TEST_INVALID_REGEX("\\A?", perl); TEST_INVALID_REGEX("a|?", perl); TEST_INVALID_REGEX("a|?", boost::regex::extended); TEST_INVALID_REGEX("({1,2})", perl); TEST_INVALID_REGEX("({1,2})", boost::regex::extended); TEST_INVALID_REGEX("^{1,2}", perl); TEST_INVALID_REGEX("^{1,2}", boost::regex::extended); TEST_INVALID_REGEX("${1,2}", perl); TEST_INVALID_REGEX("${1,2}", boost::regex::extended); TEST_INVALID_REGEX("\\b{1,2}", perl); TEST_INVALID_REGEX("\\B{1,2}", perl); TEST_INVALID_REGEX("\\A{1,2}", perl); TEST_INVALID_REGEX("\\z{1,2}", perl); TEST_INVALID_REGEX("\\Z{1,2}", perl); TEST_INVALID_REGEX("\\A{1,2}", perl); TEST_INVALID_REGEX("a|{1,2}", perl); TEST_INVALID_REGEX("a|{1,2}", boost::regex::extended); // now try operator + : TEST_REGEX_SEARCH("ab+", perl, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("ab+", perl, "ab", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("ab+", perl, "sssabbbbbbsss", match_default, make_array(3, 10, -2, -2)); TEST_REGEX_SEARCH("ab+c+", perl, "abbb", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("ab+c+", perl, "accc", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("ab+c+", perl, "abbcc", match_default, make_array(0, 5, -2, -2)); TEST_INVALID_REGEX("+a", perl); TEST_INVALID_REGEX("\\<+", perl); TEST_INVALID_REGEX("\\>+", perl); TEST_REGEX_SEARCH("\n+", perl, "\n\n", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("\\+", perl, "+", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("\\+", perl, "++", match_default, make_array(0, 1, -2, 1, 2, -2, -2)); TEST_REGEX_SEARCH("\\++", perl, "++", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("+", basic|bk_plus_qm, "+", match_default, make_array(0, 1, -2, -2)); TEST_INVALID_REGEX("\\+", basic|bk_plus_qm); TEST_REGEX_SEARCH("a\\+", basic|bk_plus_qm, "aa", match_default, make_array(0, 2, -2, -2)); // now try operator ? TEST_REGEX_SEARCH("a?", perl, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); TEST_REGEX_SEARCH("ab?", perl, "a", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("ab?", perl, "ab", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("ab?", perl, "sssabbbbbbsss", match_default, make_array(3, 5, -2, -2)); TEST_REGEX_SEARCH("ab?c?", perl, "a", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("ab?c?", perl, "abbb", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("ab?c?", perl, "accc", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("ab?c?", perl, "abcc", match_default, make_array(0, 3, -2, -2)); TEST_INVALID_REGEX("?a", perl); TEST_INVALID_REGEX("\\<?", perl); TEST_INVALID_REGEX("\\>?", perl); TEST_REGEX_SEARCH("\n?", perl, "\n\n", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); TEST_REGEX_SEARCH("\\?", perl, "?", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("\\?", perl, "?", match_default, make_array(0, 1, -2, -2)); TEST_REGEX_SEARCH("\\??", perl, "??", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); TEST_REGEX_SEARCH("?", basic|bk_plus_qm, "?", match_default, make_array(0, 1, -2, -2)); TEST_INVALID_REGEX("\\?", basic|bk_plus_qm); TEST_REGEX_SEARCH("a\\?", basic|bk_plus_qm, "aa", match_default, make_array(0, 1, -2, 1, 2, -2, 2, 2, -2, -2)); TEST_REGEX_SEARCH("a\\?", basic|bk_plus_qm, "b", match_default, make_array(0, 0, -2, 1, 1, -2, -2)); TEST_REGEX_SEARCH("a?", basic, "a?", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a+", basic, "a+", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\?", basic, "a?", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\+", basic, "a+", match_default, make_array(0, 2, -2, -2)); // now try operator {} TEST_REGEX_SEARCH("a{2}", perl, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a{2}", perl, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2}", perl, "aaa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2,}", perl, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a{2,}", perl, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2,}", perl, "aaaaa", match_default, make_array(0, 5, -2, -2)); TEST_REGEX_SEARCH("a{2,4}", perl, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a{2,4}", perl, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2,4}", perl, "aaa", match_default, make_array(0, 3, -2, -2)); TEST_REGEX_SEARCH("a{2,4}", perl, "aaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a{2,4}", perl, "aaaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a{ 2 , 4 }", perl, "aaaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a{ 2 , }", perl, "aaaaa", match_default, make_array(0, 5, -2, -2)); TEST_REGEX_SEARCH("a{ 2 }", perl, "aaa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\{\\}", perl, "a{}", match_default, make_array(0, 3, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?", perl, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a{2,4}?", perl, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?", perl, "aaa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?", perl, "aaaa", match_default, make_array(0, 2, -2, 2, 4, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?", perl, "aaaaa", match_default, make_array(0, 2, -2, 2, 4, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?$", perl, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?$", perl, "aaa", match_default, make_array(0, 3, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?$", perl, "aaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a{2,4}?$", perl, "aaaaa", match_default, make_array(1, 5, -2, -2)); TEST_REGEX_SEARCH("^a{0,1}?$", perl, "aaaaa", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("^(?:a){0,1}?$", perl, "aaaaa", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("^a(?:bc)?", perl, "abcbc", match_any|match_all, make_array(-2, -2));}void test_simple_repeats2(){ using namespace boost::regex_constants; TEST_INVALID_REGEX("a{}", perl); TEST_INVALID_REGEX("a{", perl); TEST_INVALID_REGEX("a{1", perl); TEST_INVALID_REGEX("a{1,", perl); TEST_INVALID_REGEX("a{1,2", perl); TEST_INVALID_REGEX("a{ 1 , 2 ", perl); TEST_INVALID_REGEX("a{ }", perl); TEST_INVALID_REGEX("a}", perl); TEST_INVALID_REGEX("{1}", perl); TEST_INVALID_REGEX("a{b}", perl); TEST_INVALID_REGEX("a{1b}", perl); TEST_INVALID_REGEX("a{1,b}", perl); TEST_INVALID_REGEX("a{1,2v}", perl); TEST_INVALID_REGEX("a{2,1}", perl); // now try operator \\{\\} for POSIX basic regexes TEST_REGEX_SEARCH("a\\{2\\}", basic, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a\\{2\\}", basic|no_intervals, "a{2}", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a\\{2\\}", basic, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\{2\\}", basic, "aaa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\{2,\\}", basic, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a\\{2,\\}", basic, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\{2,\\}", basic, "aaaaa", match_default, make_array(0, 5, -2, -2)); TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "a", match_default, make_array(-2, -2)); TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aaa", match_default, make_array(0, 3, -2, -2)); TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a\\{2,4\\}", basic, "aaaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a\\{ 2 , 4 \\}", basic, "aaaaa", match_default, make_array(0, 4, -2, -2)); TEST_REGEX_SEARCH("a\\{ 2 , \\}", basic, "aaaaa", match_default, make_array(0, 5, -2, -2)); TEST_REGEX_SEARCH("a\\{ 2 \\}", basic, "aaa", match_default, make_array(0, 2, -2, -2)); TEST_REGEX_SEARCH("a{}", basic, "a{}", match_default, make_array(0, 3, -2, -2)); TEST_INVALID_REGEX("a\\{\\}", basic); TEST_INVALID_REGEX("a\\{", basic); TEST_INVALID_REGEX("a\\{1", basic); TEST_INVALID_REGEX("a\\{1,", basic); TEST_INVALID_REGEX("a\\{1,\\", basic); TEST_INVALID_REGEX("a\\{ \\}", basic); TEST_INVALID_REGEX("a\\}", basic); TEST_INVALID_REGEX("\\{1\\}", basic);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?