<?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.31 (Ruby 3.2.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-jsonpath-iregexp-05" 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-05"/>
    <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="April" day="26"/>
    <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 (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>
        <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>
    <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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

-->

</rfc>
