ctre
====

A compile-time (almost) PCRE-compatible regular expression matcher for C++.

Overview
========

Fast compile-time regular expressions with support for matching/searching/capturing at compile-time or runtime. ::

  ctre::match<"REGEX">(subject); // C++20
  "REGEX"_ctre.match(subject); // C++17 + N3599 extension

.. toctree::
   :maxdepth: 2

   api
   examples
   regex_syntax

Supported compilers
===================

- clang 6.0+ (template UDL, C++17 syntax)
- xcode clang 10.0+ (template UDL, C++17 syntax)
- gcc 7.4+ (template UDL, C++17 syntax)
- gcc 9.0+ (C++17 & C++20 cNTTP syntax)
- MSVC 15.8.8+ (C++17 syntax only)

Basic Usage
===========

Template UDL syntax
-------------------

Compiler must support N3599 extension, as GNU extension in gcc (not in GCC 9.1+) and clang. ::

  constexpr auto match(std::string_view sv) noexcept {
  	using namespace ctre::literals;
  	return "h.*"_ctre.match(sv);
  }

If you need N3599 extension in GCC 9.1+ you can't use -pedantic mode and define the macro ``CTRE_ENABLE_LITERALS``.

C++17 syntax
------------

You can provide pattern as a constexpr ``ctll::fixed_string variable``. ::

  static constexpr auto pattern = ctll::fixed_string{ "h.*" };
  
  constexpr auto match(std::string_view sv) noexcept {
  	return ctre::match<pattern>(sv);
  }

(this is tested in MSVC 15.8.8)

C++20 syntax
------------

Currently only compiler which supports cNTTP syntax ``ctre::match<PATTERN>(subject)`` is GCC 9+. ::

  constexpr auto match(std::string_view sv) noexcept {
  	return ctre::match<"h.*">(sv);
  }