File: z_matching.cpp

package info (click to toggle)
ctre 3.9.0%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 5,084 kB
  • sloc: cpp: 80,452; makefile: 135; javascript: 69; python: 31
file content (33 lines) | stat: -rw-r--r-- 2,051 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <ctre.hpp>
#include <string_view>

void empty_symbol() { }

template <typename Pattern> constexpr bool match(std::string_view input, Pattern) {
	return bool(ctre::regular_expression<Pattern>::match(input.begin(), input.end()));
}

template <typename Pattern> constexpr bool search(std::string_view input, Pattern) {
	return bool(ctre::regular_expression<Pattern>::search(input.begin(), input.end()));
}

template <typename Pattern> constexpr bool starts_with(std::string_view input, Pattern) {
	return bool(ctre::regular_expression<Pattern>::starts_with(input.begin(), input.end()));
}

using namespace std::string_view_literals;

// issue #131
static_assert(match("x"sv, ctre::sequence<ctre::optional<ctre::lazy_star<ctre::any>>, ctre::character<'x'>>()));
static_assert(match("1x"sv, ctre::sequence<ctre::lazy_optional<ctre::lazy_star<ctre::any>>, ctre::character<'x'>>()));
static_assert(match("1x"sv, ctre::sequence<ctre::optional<ctre::lazy_star<ctre::any>>, ctre::character<'x'>>()));
static_assert(match("1x"sv, ctre::sequence<ctre::optional<ctre::lazy_star<ctre::character<'1'> > >, ctre::character<'x'>>()));
static_assert(match("1yx"sv, ctre::sequence<ctre::optional<ctre::lazy_star<ctre::character<'1'> >, ctre::character<'y'> >, ctre::character<'x'>>()));
static_assert(match("aaab"sv, ctre::sequence<ctre::possessive_plus<ctre::optional<ctre::character<'a'>>>, ctre::character<'b'>>()));
static_assert(match("aaa"sv, ctre::possessive_plus<ctre::select<ctre::empty, ctre::character<'a'>>>()));
static_assert(match("aaa"sv, ctre::lazy_plus<ctre::select<ctre::empty, ctre::character<'a'>>>()));
static_assert(match("aaaa"sv, ctre::possessive_plus<ctre::lazy_star<ctre::character<'a'>>>()));
static_assert(match(""sv, ctre::lazy_star<ctre::character<'b'>>()));
static_assert(match("aaaa"sv, ctre::possessive_plus<ctre::lazy_star<ctre::character<'a'>>, ctre::lazy_star<ctre::character<'b'>>>()));
static_assert(match("aaaab"sv, ctre::possessive_plus<ctre::lazy_star<ctre::character<'a'>>, ctre::lazy_star<ctre::character<'b'>>>()));