<?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.27 (Ruby 3.2.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonpath-iregexp-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="I-Regexp">I-Regexp: An Interoperable Regexp Format</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-iregexp-04"/>
    <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="March" day="31"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>
    <section anchor="intro">
      <name>Introduction</name>
      <t>This specification describes an interoperable regular expression 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.</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 which conforms to the requirements
in this specification; the plural is "I-Regexps".</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>
        <t>The grammatical rules in this document are to be interpreted as ABNF,
as described in <xref target="RFC5234"/> and <xref target="RFC7405"/>.</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 Unicode support 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 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="26" month="March" 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-12"/>
        </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>
    <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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
NRPQy/PuGONe4U8QEhZjKgntQl8IrD+/hiJcRdHni4NrFRuOT9Uaz836+Vid
rHBLjVOb3IrCjTP88sYJ+8ptd0wEhHPYRMaZ3+dSdg/6cmfnsum1rneuGpct
r3P9DRfzdncfd9pXjZ3m4w5a+9dX4d4u/tZHH7Q6Ei8wkl4vW/VWu/e00aXd
R5dl98nD/237/0f+f1D5n6d4ufvN+uDDTksScX3fmxx7b6+p42D9eXfv2aBu
T/7CmOXBBpX9TgdsGDxW+zXr3afdwe7OZttgFx/PJzgiPn4aXL/E+8Mn953/
Bysbe1eNBnHwcW1cq9k+/KcWbjWJRb9l4SaPO9zg0p552z/gt+2DbldeXdDg
C8veVssMbB0cdeSlr6DtD3aUe9Vpt9vy8tj78frS936yLw86h6txVxtthx0M
+HS1d90wLw67Hac1WH+j7onNtw/s9nvtI7Nk96gJQl+uNx40mxvU9/tO33u9
367v5eiD9sEX9H3VpduStH2w4S/X9gvmv/L+0rAcqXRty8Zjo/F4+en+T2DB
Y+Py0/yUv+Bb/M5xZTWg1/rNtlQOPjw8+NW2tBrU7/xaWyrH9Nr/wEK97vpC
R09e9bH77HFteKvZbf1DZlSZ4PC3mNFqXL/PdF9tShdG0a/saLClw2H3n6O5
ddj/DTT3us1exdlVVthlCW227LK9dZ/Wxra6/e6vGtutd1pmaO/gyIq4ScHi
Z3S17NrqHBz9Qtcj66ngAbbEF+7SPzBu6ajT7jxzdZW3Bwc/b7DVrofyEqZ6
CSu9LO3zqNk177s9DodbaEGXvnG7vWbXuEj3ptXvWlOjQLm30dYxTprsAd6K
vx1ujOs3D+SPj5dXL6+86wq3NjodQuTtnZ32ZZd83eNOxzq9q8ZuY2PRfo/0
8nLClrphtwPXu903G+r1jw7XN9TpWvU86h25DZVt/Xav6vCPSr3qWRk5M6m8
gYB/Vj6VrgfNX+NQj+DGrUPFgO0C6/VMiILQj+T+NzsbC7/c3dl/1rS3MZL4
uNlpYHuB3VZ/W4gXdNTKMeyo37VSOOgf/qLnRezZvMlW3sHeOHPdBh7XkbUg
BM233AL6sQ+SxKm9174F6BeJwfAqdDiffzC8yn2e/drHZvE2e6QWPvrk39oc
f/yD+OE76Y8p/yuvl6wOzsoDjrkCnk4iPTeFlbVfDpmr75ULAGs1O/5dBP2S
iT7HdD1J3fIZ7ooubQmg2x9/Pj77Tt7YUxtTVxu+efNO3jQMJWUVyZ3Xjgmn
ULKTpfRLYXOuV7Lljk9I9CKy99+Xy2/457CIrjsYjSSctiFPQTllD+bX2buE
2P8f45WJGuA9AAA=

-->

</rfc>
