<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.33 (Ruby 3.2.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonpath-iregexp-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="I-Regexp">I-Regexp: An Interoperable Regexp Format</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-iregexp-06"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="T." surname="Bray" fullname="Tim Bray">
      <organization>Textuality</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>tbray@textuality.com</email>
      </address>
    </author>
    <date year="2023" month="May" day="04"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 64?>

<t>This document specifies I-Regexp, a flavor of regular expressions that is
limited in scope with the goal of interoperation across many different
regular-expression libraries.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-jsonpath-iregexp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        JSONPath Working Group mailing list (<eref target="mailto:JSONPath@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/JSONPath/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/JSONPath/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-jsonpath/iregexp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 70?>

<section anchor="intro">
      <name>Introduction</name>
      <t>This specification describes an interoperable regular expression ("regexp") flavor, I-Regexp.</t>
      <t>I-Regexp does not provide advanced regular expression features such as capture groups, lookahead, or backreferences.
It supports only a Boolean matching capability, i.e., testing whether a given regular expression matches a given piece of text.</t>
      <t>I-Regexp supports the entire repertoire of Unicode characters (Unicode
scalar values).</t>
      <t>I-Regexp is a subset of XSD regular expressions <xref target="XSD-2"/>.</t>
      <t>This document includes guidance for converting I-Regexps for use with several well-known regular expression idioms.</t>
      <t>The development of I-Regexp was motivated by the work of the JSONPath Working Group. The Working Group wanted to include
in its specification <xref target="I-D.ietf-jsonpath-base"/> support for the use of regular expressions in JSONPath filters, but was unable to find a useful
specification for regular expressions which would be interoperable across the popular libraries.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the abbreviation "regexp" for what are usually
called regular expressions in programming.
"I-Regexp" is used as a noun meaning a character string (sequence of
Unicode scalar values) that conforms to the requirements
in this specification; the plural is "I-Regexps".</t>
        <t>This specification uses Unicode terminology.
A good entry point into that is provided by <xref target="UNICODE-GLOSSARY"/>.</t>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>The grammatical rules in this document are to be interpreted as ABNF,
as described in <xref target="RFC5234"/> and <xref target="RFC7405"/>, where the "characters" of
<xref section="2.3" sectionFormat="of" target="RFC5234"/> are Unicode scalar values.</t>
      </section>
    </section>
    <section anchor="requirements">
      <name>Requirements</name>
      <t>I-Regexps should handle the vast majority of practical cases where a
matching regexp is needed in a data model specification or a query
language expression.</t>
      <t>The editors of this document conducted a survey of the regexp syntax
used in published RFCs. All examples found there should be covered by I-Regexps,
both syntactically and with their intended semantics.
The exception is the use of multi-character escapes, for which
workaround guidance is provided in <xref target="mapping"/>.</t>
    </section>
    <section anchor="defn">
      <name>I-Regexp Syntax</name>
      <t>An I-Regexp <bcp14>MUST</bcp14> conform to the ABNF specification in
<xref target="iregexp-abnf"/>.</t>
      <figure anchor="iregexp-abnf">
        <name>I-Regexp Syntax in ABNF</name>
        <sourcecode type="abnf"><![CDATA[
i-regexp = branch *( "|" branch )
branch = *piece
piece = atom [ quantifier ]
quantifier = ( %x2A-2B ; '*'-'+'
 / "?" ) / ( "{" quantity "}" )
quantity = QuantExact [ "," [ QuantExact ] ]
QuantExact = 1*%x30-39 ; '0'-'9'

atom = NormalChar / charClass / ( "(" i-regexp ")" )
NormalChar = ( %x00-27 / %x2C-2D ; ','-'-'
 / %x2F-3E ; '/'-'>'
 / %x40-5A ; '@'-'Z'
 / %x5E-7A ; '^'-'z'
 / %x7E-10FFFF )
charClass = "." / SingleCharEsc / charClassEsc / charClassExpr
SingleCharEsc = "\" ( %x28-2B ; '('-'+'
 / %x2D-2E ; '-'-'.'
 / "?" / %x5B-5E ; '['-'^'
 / %s"n" / %s"r" / %s"t" / %x7B-7D ; '{'-'}'
 )
charClassEsc = catEsc / complEsc
charClassExpr = "[" [ "^" ] ( "-" / CCE1 ) *CCE1 [ "-" ] "]"
CCE1 = ( CCchar [ "-" CCchar ] ) / charClassEsc
CCchar = ( %x00-2C / %x2E-5A ; '.'-'Z'
 / %x5E-10FFFF ) / SingleCharEsc
catEsc = %s"\p{" charProp "}"
complEsc = %s"\P{" charProp "}"
charProp = IsCategory
IsCategory = Letters / Marks / Numbers / Punctuation / Separators /
    Symbols / Others
Letters = %s"L" [ ( %x6C-6D ; 'l'-'m'
 / %s"o" / %x74-75 ; 't'-'u'
 ) ]
Marks = %s"M" [ ( %s"c" / %s"e" / %s"n" ) ]
Numbers = %s"N" [ ( %s"d" / %s"l" / %s"o" ) ]
Punctuation = %s"P" [ ( %x63-66 ; 'c'-'f'
 / %s"i" / %s"o" / %s"s" ) ]
Separators = %s"Z" [ ( %s"l" / %s"p" / %s"s" ) ]
Symbols = %s"S" [ ( %s"c" / %s"k" / %s"m" / %s"o" ) ]
Others = %s"C" [ ( %s"c" / %s"f" / %x6E-6F ; 'n'-'o'
 ) ]
]]></sourcecode>
      </figure>
      <t>As an additional restriction, <tt>charClassExpr</tt> is not allowed to
match <tt>[^]</tt>, which according to this grammar would parse as a
positive character class containing the single character <tt>^</tt>.</t>
      <t>This is essentially XSD regexp without character class
subtraction, without multi-character escapes such as <tt>\s</tt>,
<tt>\S</tt>, and <tt>\w</tt>, and without Unicode blocks.</t>
      <t>An I-Regexp implementation <bcp14>MUST</bcp14> be a complete implementation of this
limited subset.
In particular, full support for the Unicode functionality defined in
this specification is <bcp14>REQUIRED</bcp14>; the implementation
<bcp14>MUST NOT</bcp14> limit itself to 7- or 8-bit character sets such as ASCII and
<bcp14>MUST</bcp14> support the Unicode character property set in character classes.</t>
      <section anchor="checking">
        <name>Checking Implementations</name>
        <t>A <em>checking</em> I-Regexp implementation is one that checks a supplied
regexp for compliance with this specification and reports any problems.
Checking implementations give their users confidence that they didn't
accidentally insert non-interoperable syntax, so checking is <bcp14>RECOMMENDED</bcp14>.
Exceptions to this rule may be made for low-effort implementations
that map I-Regexp to another regexp library by simple steps such as
performing the mapping operations discussed in <xref target="mapping"/>; here, the
effort needed to do full checking may dwarf the rest of the
implementation effort.
Implementations <bcp14>SHOULD</bcp14> document whether they are checking or not.</t>
        <t>Specifications that employ I-Regexp may want to define in which
cases their implementations can work with a non-checking I-Regexp
implementation and when full checking is needed, possibly in the
process of defining their own implementation classes.</t>
      </section>
    </section>
    <section anchor="i-regexp-semantics">
      <name>I-Regexp Semantics</name>
      <t>This syntax is a subset of that of <xref target="XSD-2"/>.
Implementations which interpret I-Regexps <bcp14>MUST</bcp14>
yield Boolean results as specified in <xref target="XSD-2"/>.
(See also <xref target="xsd-regexps"/>.)</t>
    </section>
    <section anchor="mapping">
      <name>Mapping I-Regexp to Regexp Dialects</name>
      <t>The material in this section is non-normative, provided as guidance
to developers who want to use I-Regexps in the context of other
regular expression dialects.</t>
      <section anchor="multi-character-escapes">
        <name>Multi-Character Escapes</name>
        <t>Common multi-character escapes (MCEs), and character classes built around them,
which are not supported in I-Regexp, can usually
be replaced as shown for example in <xref target="tbl-sub"/>.</t>
        <table anchor="tbl-sub">
          <name>Example substitutes for multi-character escapes</name>
          <thead>
            <tr>
              <th align="left">MCE/class</th>
              <th align="left">Replace with</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>\S</tt></td>
              <td align="left">
                <tt>[^ \t\n\r]</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>[\S ]</tt></td>
              <td align="left">
                <tt>[^\t\n\r]</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>\d</tt></td>
              <td align="left">
                <tt>[0-9]</tt></td>
            </tr>
          </tbody>
        </table>
        <t>Note that the semantics of <tt>\d</tt> in XSD regular expressions is that of
<tt>\p{Nd}</tt>; however, this would include all Unicode characters that are
digits in various writing systems, which is almost certainly not what is
required in IETF publications.</t>
        <t>The construct <tt>\p{IsBasicLatin}</tt> is essentially a reference to legacy
ASCII, it can be replaced by the character class <tt>[\u0000-\u007f]</tt>.</t>
      </section>
      <section anchor="xsd-regexps">
        <name>XSD Regexps</name>
        <t>Any I-Regexp also is an XSD Regexp <xref target="XSD-2"/>, so the mapping is an identity
function.</t>
        <t>Note that a few errata for <xref target="XSD-2"/> have been fixed in <xref target="XSD11-2"/>, which
is therefore also included as a normative reference.
XSD 1.1 is less widely implemented than XSD 1.0, and implementations
of XSD 1.0 are likely to include these bugfixes, so for the intents
and purposes of this specification an implementation of XSD 1.0
regexps is equivalent to an implementation of XSD 1.1 regexps.</t>
      </section>
      <section anchor="toESreg">
        <name>ECMAScript Regexps</name>
        <t>Perform the following steps on an I-Regexp to obtain an ECMAScript
regexp <xref target="ECMA-262"/>:</t>
        <ul spacing="normal">
          <li>For any unescaped dots (<tt>.</tt>) outside character classes (first alternative
of <tt>charClass</tt> production): replace dot by <tt>[^\n\r]</tt>.</li>
          <li>Envelope the result in <tt>^(?:</tt> and <tt>)$</tt>.</li>
        </ul>
        <t>The ECMAScript regexp is to be interpreted as a Unicode pattern ("u"
flag; see Section 21.2.2 "Pattern Semantics" of <xref target="ECMA-262"/>).</t>
        <t>Note that where a regexp literal is required,
the actual regexp needs to be enclosed in <tt>/</tt>.</t>
      </section>
      <section anchor="pcre-re2-ruby-regexps">
        <name>PCRE, RE2, Ruby Regexps</name>
        <t>Perform the same steps as in <xref target="toESreg"/> to obtain a valid regexp in
PCRE <xref target="PCRE2"/>, the Go programming language <xref target="RE2"/>, and the Ruby
programming language, except that the last step is:</t>
        <ul spacing="normal">
          <li>Enclose the regexp in <tt>\A(?:</tt> and <tt>)\z</tt>.</li>
        </ul>
      </section>
    </section>
    <section anchor="background">
      <name>Motivation and Background</name>
      <t>While regular expressions originally were intended to describe a
formal language to support a Boolean matching function, they
have been enhanced with parsing functions that support the extraction
and replacement of arbitrary portions of the matched text. With this
accretion of features, parsing regexp libraries have become
more susceptible to bugs and surprising performance degradations which
can be exploited in Denial of Service attacks by
an attacker who controls the regexp submitted for
processing. I-Regexp is designed to offer interoperability, and to be
less vulnerable to such attacks, with the trade-off that its only
function is to offer a boolean response as to whether a character
sequence is matched by a regexp.</t>
      <section anchor="subsetting">
        <name>Implementing I-Regexp</name>
        <t>XSD regexps are relatively easy to implement or map to widely
implemented parsing regexp dialects, with these notable
exceptions:</t>
        <ul spacing="normal">
          <li>Character class subtraction.  This is a very useful feature in many
specifications, but it is unfortunately mostly absent from parsing
regexp dialects. Thus, it is omitted from I-Regexp.</li>
          <li>Multi-character escapes.  <tt>\d</tt>, <tt>\w</tt>, <tt>\s</tt> and their uppercase
complement classes exhibit a
large amount of variation between regexp flavors.  Thus, they are
omitted from I-Regexp.</li>
          <li>Not all regexp implementations
support accesses to Unicode tables that enable
executing constructs such as <tt>\p{Nd}</tt>,
although the <tt>\p</tt>/<tt>\P</tt> feature in general is now quite
widely available. While in principle it's possible to
translate these into character-class matches, this also requires
access to those tables. Thus, regexp libraries in severely
constrained environments may not be able to support I-Regexp
conformance.</li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no requests of IANA.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>As discussed in <xref target="background"/>, more complex regexp libraries may
contain exploitable bugs leading to crashes and remote code
execution.  There is also the problem that such libraries often have
hard-to-predict performance characteristics, leading to attacks
that overload an implementation by matching against an expensive
attacker-controlled regexp.</t>
      <t>I-Regexps have been designed to allow implementation in a way that is
resilient to both threats; this objective needs to be addressed
throughout the implementation effort.
Non-checking implementations (see <xref target="checking"/>) are likely to expose
security limitations of any regexp engine they use, which may be less
problematic if that engine has been built with security considerations
in mind (e.g., <xref target="RE2"/>); a checking implementation is still <bcp14>RECOMMENDED</bcp14>.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="XSD-2" target="https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/">
          <front>
            <title>XML Schema Part 2: Datatypes Second Edition</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="Paul V. Biron" role="editor"/>
            <date day="28" month="October" year="2004"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xmlschema-2-20041028"/>
          <seriesInfo name="W3C" value="REC-xmlschema-2-20041028"/>
        </reference>
        <reference anchor="XSD11-2" target="https://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/">
          <front>
            <title>W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="David Peterson" role="editor"/>
            <author fullname="Henry Thompson" role="editor"/>
            <author fullname="Michael Sperberg-McQueen" role="editor"/>
            <author fullname="Paul V. Biron" role="editor"/>
            <author fullname="Sandy Gao" role="editor"/>
            <date day="5" month="April" year="2012"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xmlschema11-2-20120405"/>
          <seriesInfo name="W3C" value="REC-xmlschema11-2-20120405"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat">
              <organization/>
            </author>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-jsonpath-base">
          <front>
            <title>JSONPath: Query expressions for JSON</title>
            <author fullname="Stefan Gössner" initials="S." surname="Gössner">
              <organization>Fachhochschule Dortmund</organization>
            </author>
            <author fullname="Glyn Normington" initials="G." surname="Normington">
         </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="15" month="April" year="2023"/>
            <abstract>
              <t>   JSONPath defines a string syntax for selecting and extracting JSON
   (RFC 8259) values from a JSON value.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-13"/>
        </reference>
        <reference anchor="UNICODE-GLOSSARY" target="https://unicode.org/glossary/">
          <front>
            <title>Glossary of Unicode Terms</title>
            <author>
              <organization>Unicode, Inc.</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RE2" target="https://github.com/google/re2">
          <front>
            <title>RE2 is a fast, safe, thread-friendly alternative to backtracking regular expression engines like those used in PCRE, Perl, and Python. It is a C++ library.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="PCRE2" target="http://pcre.org/current/doc/html/">
          <front>
            <title>Perl-compatible Regular Expressions (revised API: PCRE2)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ECMA-262" target="https://www.ecma-international.org/wp-content/uploads/ECMA-262.pdf">
          <front>
            <title>ECMAScript 2020 Language Specification</title>
            <author>
              <organization>Ecma International</organization>
            </author>
            <date year="2020" month="June"/>
          </front>
          <seriesInfo name="ECMA" value="Standard ECMA-262, 11th Edition"/>
        </reference>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
      </references>
    </references>
    <?line 357?>

<section anchor="rfcs" removeInRFC="true">
      <name>Regexps and Similar Constructs in Recent Published RFCs</name>
      <t>This appendix contains a number of regular expressions that have been
extracted from some recently published RFCs based on some ad-hoc matching.
Multi-line constructions were not included.
With the exception of some (often surprisingly dubious) usage of multi-character
escapes and a reference to the <tt>IsBasicLatin</tt> Unicode block, all
regular expressions validate against the ABNF in <xref target="iregexp-abnf"/>.</t>
      <figure anchor="iregexp-examples">
        <name>Example regular expressions extracted from RFCs</name>
        <artwork><![CDATA[
rfc6021.txt  459 (([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))
rfc6021.txt  513 \d*(\.\d*){1,127}
rfc6021.txt  529 \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?
rfc6021.txt  631 ([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?
rfc6021.txt  647 [0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}
rfc6021.txt  933 ((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}
rfc6021.txt  938 (([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|
rfc6021.txt 1026 ((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}
rfc6021.txt 1031 (([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|
rfc6020.txt 6647 [0-9a-fA-F]*
rfc6095.txt 2544 \S(.*\S)?
rfc6110.txt 1583 [aeiouy]*
rfc6110.txt 3222 [A-Z][a-z]*
rfc6536.txt 1583 \*
rfc6536.txt 1632 [^\*].*
rfc6643.txt  524 \p{IsBasicLatin}{0,255}
rfc6728.txt 3480 \S+
rfc6728.txt 3500 \S(.*\S)?
rfc6991.txt  477 (([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))
rfc6991.txt  525 \d*(\.\d*){1,127}
rfc6991.txt  541 [a-zA-Z_][a-zA-Z0-9\-_.]*
rfc6991.txt  542 .|..|[^xX].*|.[^mM].*|..[^lL].*
rfc6991.txt  571 \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?
rfc6991.txt  665 ([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?
rfc6991.txt  693 [0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}
rfc6991.txt  725 ([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?
rfc6991.txt  743 [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-
rfc6991.txt 1041 ((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}
rfc6991.txt 1046 (([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|
rfc6991.txt 1099 [0-9\.]*
rfc6991.txt 1109 [0-9a-fA-F:\.]*
rfc6991.txt 1164 ((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}
rfc6991.txt 1169 (([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|
rfc7407.txt  933 ([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){0,254}
rfc7407.txt 1494 ([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){4,31}
rfc7758.txt  703 \d{2}:\d{2}:\d{2}(\.\d+)?
rfc7758.txt 1358 \d{2}:\d{2}:\d{2}(\.\d+)?
rfc7895.txt  349 \d{4}-\d{2}-\d{2}
rfc7950.txt 8323 [0-9a-fA-F]*
rfc7950.txt 8355 [a-zA-Z_][a-zA-Z0-9\-_.]*
rfc7950.txt 8356 [xX][mM][lL].*
rfc8040.txt 4713 \d{4}-\d{2}-\d{2}
rfc8049.txt 6704 [A-Z]{2}
rfc8194.txt  629 \*
rfc8194.txt  637 [0-9]{8}\.[0-9]{6}
rfc8194.txt  905 Z|[\+\-]\d{2}:\d{2}
rfc8194.txt  963 (2((2[4-9])|(3[0-9]))\.).*
rfc8194.txt  974 (([fF]{2}[0-9a-fA-F]{2}):).*
rfc8299.txt 7986 [A-Z]{2}
rfc8341.txt 1878 \*
rfc8341.txt 1927 [^\*].*
rfc8407.txt 1723 [0-9\.]*
rfc8407.txt 1749 [a-zA-Z_][a-zA-Z0-9\-_.]*
rfc8407.txt 1750 .|..|[^xX].*|.[^mM].*|..[^lL].*
rfc8525.txt  550 \d{4}-\d{2}-\d{2}
rfc8776.txt  838 /?([a-zA-Z0-9\-_.]+)(/[a-zA-Z0-9\-_.]+)*
rfc8776.txt  874 ([a-zA-Z0-9\-_.]+:)*
rfc8819.txt  311 [\S ]+
rfc8944.txt  596 [0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){7}
]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This draft has been motivated by the discussion in the IETF JSONPATH
WG about whether to include a regexp mechanism into the JSONPath query
expression specification, as well as by previous discussions about the
YANG <tt>pattern</tt> and CDDL <tt>.regexp</tt> features.</t>
      <t>The basic approach for this draft was inspired by <xref target="RFC7493">The
I-JSON Message Format</xref>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
aXQ8W2lknj1teTLYMHFD04ZlSm6utK9xepXewx9Xnh3fa41/fBkDZEqvc/Dy
G2F0hE0K+ggTkFkRK/3bpSQPX528aQp8WREX/BzlAhALCcQ+ITN4fGySZGgy
rNuoQk6DbPH+/kwZzNBt9cgTlpNgwEZDJRcEWFozS1GFDQiXfNocJMRmwWtg
dYTOv6UZoi4tsKTled+BT5ZoaPNFGaSzMtolSoVmcz6BPh+RI1TxmjmnFLTh
XLI7ETt0Wbkwa5IKgC9FlOUgU2cy/A2BJmIsYkN2re5cILJk6Lsk92+FSwqW
xSSO9BwPMAPdkodQb3XrL5Ykwim8YEiDsSHLCUgvSBE9jdMoGdUUk5QCK01u
uEGABYMdTowylnpC+9fIB4EiArCe93IbqCVvPdL1GLYo4jzyKtcL5fCXCkZn
nD4ijqBA62dMZQkB6n6N1WgB44Uc2J09qyL3GTMCmDJU0+RRCCqIuHdss9Z1
O89NWromqiiBvrnah9EzrPH3v//dZLWRZ3n+QiLcJYiQO1uy8dBwT9vCfnkh
dxh8CQPBXkg/TxfyHFpAfAJkz+SlqD28kFvyD7ddZACv5Nfyq52vvK+efyXk
rmy8bMhtfGKZ+4YdDi1tPKJZlI8v5J/p69Et+IpVGs0G/q81XWK12uML2dn5
w22v7fWGtFobqw2/EoJpfCFPKEmPx5AS1iVhjWMf0Z5p2IKvdjxobBMNtd5m
E+221x2gN7Yz9rqvaYEmFvB4O2h84/WOqHEXTd/Yxn7b2zukxm/R+JNt3Dvy
Btz4CY0/28bBkddpv8Eflq5oeyEbrQben0ErYkXEHOmgTv36I6xPrHbGFBcN
I4UDK4WtUgpoBF5lsmknrVI0TOcrb49fnePVJ9NfN5KG+czsZ246D155A+bJ
PTo/onNtG4YMaKKlFjl2jK9ihWwi9JzE2/jUgFwhE49mHo+POlCUHf4858ZL
2bhsCG4gyYzHNI99Zx8uWbfqBAj7ppLl2Oz/yEqotSohJ4x15gu7jRe094sl
dJemPQWGJN0Vbm/2/emT9+7hhTzWYyDxWQrvWX1F+1uVc1qyK9/52Wf6PCkW
E9NyWiRBXhiTBmFqCY/D3tVUfM7uFpM0po7vyRVq4eZiat4Sd2n3+2Nvn2UV
Y88LJ9jUCrLvDfboZY6XBQkSNmYo4Vne2Vl0I7AaoBqlZlBfRy33Pil7h7ZX
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
OWUP5pf424TY/x8ffNB/zD8AAA==

-->

</rfc>
