<?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-rfc2629 version 1.6.4 (Ruby 3.1.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-jsonpath-iregexp-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.1 -->
  <front>
    <title abbrev="I-Regexp">I-Regexp: An Interoperable Regexp Format</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-jsonpath-iregexp-03"/>
    <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>
        <email>tbray@textuality.com</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <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-bormann-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/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cabo/iregexp"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The present specification defines an interoperable regular expression flavor, I-Regexp.</t>
      <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>I-Regexp does not provide advanced regexp features such as capture groups, lookahead, or backreferences.
It supports only a Boolean matching capability, i.e., testing whether a given regexp matches a given piece of text.</t>
      <t>I-Regexp is a subset of XSD regexps <xref target="XSD-2"/>.</t>
      <t>This document includes rules for converting I-Regexps for use with several well-known regexp libraries.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <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>
      </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>A brief survey of published RFCs yielded the regexp patterns in
Appendix A (with no attempt at completeness).
With certain exceptions as discussed there,
these should be covered by I-Regexps, both syntactically and with
their intended semantics.</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 / IsBlock
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'
 ) ]
IsBlock = %s"Is" 1*( "-" / %x30-39 ; '0'-'9'
 / %x41-5A ; 'A'-'Z'
 / %x61-7A ; 'a'-'z'
 )
]]></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 and multi-character escapes.</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>
      <ul spacing="normal">
        <li>
          <strong>Issues</strong>:
The ABNF has been automatically generated and maybe could use some further
polishing.
The ABNF has been verified against <xref target="rfcs"/>, but a wider corpus of
regular expressions will need to be examined.
Note that about a third of the complexity of this ABNF grammar comes from going
into details on the Unicode IsCategory classes.  Additional complexity
stems from the way hyphens can be used inside character classes to denote
ranges; the grammar deliberately excludes questionable usage such as
<tt>/[a-z-A-Z]/</tt>.</li>
      </ul>
    </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-i-regexp-to-regexp-dialects">
      <name>Mapping I-Regexp to Regexp Dialects</name>
      <t>(TBD; these mappings need to be further verified in implementation work.)</t>
      <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>Note that where a regexp literal is required, this needs to enclose
the actual regexp in <tt>/</tt>.</t>
        <t>The performance of an ECMAScript matcher can be increased by turning parenthesized regexps
(last choice in production <tt>atom</tt>) into <tt>(?:...)</tt> constructions.</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>Envelope the result in <tt>\A</tt> and <tt>\z</tt>.</li>
        </ul>
        <t>Again, the performance can be increased by turning parenthesized
regexps (production <tt>atom</tt>) into <tt>(?:...)</tt> constructions.</t>
      </section>
      <section anchor="your-kind-of-regexp-here-">
        <name>&lt;&lt; Your kind of Regexp here &gt;&gt;</name>
        <t>(Please submit the mapping needed for your favorite kind of regexp.)</t>
      </section>
    </section>
    <section anchor="background">
      <name>Motivation and Background</name>
      <t>Data modeling formats (YANG, CDDL) as well as query languages
(jsonpath) often need a regular expression (regexp) sublanguage.
There are many dialects of regular expressions in use in platforms,
programming languages, and data modeling formats.</t>
      <t>While regular expressions originally were intended to describe a
formal language, i.e., to provide a
Boolean matching function, they have turned into parsing functions for
many applications, with capture groups, greedy/lazy/possessive variants, etc.
Language features such as backreferences allow specifying languages
that actually are context-free (Chomsky type 2) instead of the regular
languages (Chomsky type 3) that regular expressions are named for.</t>
      <t>YANG (<xref section="9.4.5" sectionFormat="of" target="RFC7950"/>) and CDDL (<xref section="3.8.3" sectionFormat="of" target="RFC8610"/>) have adopted the regexp language from W3C Schema <xref target="XSD-2"/>.
XSD regexp is a pure matching language, i.e., XSD regexps can be used
to match a string against them and yield a simple true or false
result.
XSD regexps are not as widely implemented as programming language
regexp dialects such as those of Perl, Python, Ruby, Go <xref target="RE2"/>, or
JavaScript (ECMAScript) <xref target="ECMA-262"/>.
The latter are often in a state of continuous development; in the best
case (ECMAScript) there is a complete specification which however is
highly complex (Section 21.2 of <xref target="ECMA-262"/> comprises 62 pages) and
evolves on a yearly timeline, with significant additions.
Regexp dialects such as PCRE <xref target="PCRE2"/> have evolved to cover a
common set of functions available in parsing regexp dialects, offered
in a widely available library.</t>
      <t>With continuing accretion of complex features, parsing regexp
libraries have become susceptible to bugs and performance degradation,
in particular those that can be exploited in Denial of Service (DoS) attacks.
The library RE2 that is compatible with Go language regexps strives to
be immune to DoS attacks, making it attractive to applications such as
query languages where an attacker could control the input.
The problem remains that other bugs in such libraries can lead to
exploitable vulnerabilities; at the time of writing, the Common
Vulnerabilities and Exposures (CVE) system has 131 entries that
mention the word "regex" <xref target="REGEX-CVE"/> (not all, but many of which are
such bugs, with 23 matches for arbitrary code execution).</t>
      <t>Implementations of YANG and CDDL often struggle with providing true
XSD regexps; some instead cheat by providing one of the parsing regexp
varieties, sometimes without even advertising this fact.</t>
      <t>A matching regexp that does not use the more complex XSD features
(<xref target="subsetting"/>) can usually be converted into a parsing regexp of many
dialects by simply surrounding it with anchors of that dialect (e.g., <tt>^</tt> or <tt>\A</tt> and <tt>$</tt> or <tt>\z</tt>).
If the original matching regexps exceed the envelope of compatibility
between dialects, this can lead to interoperability problems, or,
worse, security vulnerabilities.
Also, features of the target dialect such as capture groups may be triggered inadvertently, reducing performance.</t>
      <section anchor="subsetting">
        <name>Subsetting XSD Regexps</name>
        <t>XSD regexps are relatively easy to implement or map to widely
implemented parsing regexp dialects, with a small number of notable
exceptions:</t>
        <ul spacing="normal">
          <li>
            <t>Character class subtraction.  This is a very useful feature in many
specifications, but it is unfortunately mostly absent from parsing
regexp dialects.  </t>
            <t>
Discussion: This absence can often be addressed by translating
  character class subtraction into positive character classes
  (possibly requiring significant expansion) and/or inserting
  negative lookahead assertions (which are not universally supported
  by regexp libraries, most notably not by RE2 <xref target="RE2"/>).
  This specification therefore opts for leaving out character class
  subtraction.</t>
          </li>
          <li>Multi-character escapes.  <tt>\d</tt>, <tt>\w</tt>, <tt>\s</tt> and their uppercase
equivalents (complement classes) exhibit a
large amount of variation between regexp flavors.
(E.g., predefined character classes such as <tt>\w</tt> may be meant
to be ASCII only, or they may encompass all letters and digits
defined in Unicode.    The latter is usually of interest in the
application of query
languages to text in human languages, while the former is of interest to a subset of
applications in data model specifications.)</li>
          <li>
            <t>Unicode.
While there is no doubt that a regexp flavor meant to last needs to
be Unicode enabled, there are a number of aspects of this that need
discussion.
Not all regexp implementations that one might want to map
I-Regexps into will support accesses to Unicode tables that enable
executing on constructs such as <tt>\p{IsCoptic}</tt>, for mapping into such
implementations, translation needs to be provided.
Fortunately, the <tt>\p</tt>/<tt>\P</tt> feature in general is now quite
widely available.  </t>
            <t>
Discussion: The ASCII focus can partially be addressed by adding a
  constraint outside the regexp that the matched text has to be
  ASCII in the first place.  This often is all that is needed where
  regexps are used to define lexical elements of a computer
  language.  This reduces the size of the Unicode tables required in
  such a constrained implementation considerably.  (In <xref target="rfcs"/>, RFC
  6643 contains a lone instance of <tt>\p{IsBasicLatin}{0,255}</tt>, which
  is needed to describe a transition from a legacy character set to
  Unicode.  RFC2622 contains <tt>[[:digit:]]</tt>,
  <tt>[[:alpha:]]</tt>, <tt>[[:alnum:]]</tt>, albeit in a specification for the
  <tt>flex</tt> tool; this is intended to be close to <tt>\d</tt>, <tt>\p{L}</tt>, <tt>\w</tt>
  in an ASCII subset.)</t>
          </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 are likely
to 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 attack vectors
that overload an implementation by matching against an expensive
attacked 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.</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="Paul V. Biron" initials="P." surname="Biron">
              <organization/>
            </author>
            <author fullname="Ashok Malhotra" initials="A." surname="Malhotra">
              <organization/>
            </author>
            <date day="28" month="October" year="2004"/>
          </front>
          <seriesInfo name="World Wide Web Consortium Recommendation" 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="David Peterson" initials="D." surname="Peterson">
              <organization/>
            </author>
            <author fullname="Sandy Gao" initials="S." surname="Gao">
              <organization/>
            </author>
            <author fullname="Ashok Malhotra" initials="A." surname="Malhotra">
              <organization/>
            </author>
            <author fullname="Michael Sperberg-McQueen" initials="M." surname="Sperberg-McQueen">
              <organization/>
            </author>
            <author fullname="Henry Thompson" initials="H." surname="Thompson">
              <organization/>
            </author>
            <author fullname="Paul V. Biron" initials="P." surname="Biron">
              <organization/>
            </author>
            <date day="5" month="April" year="2012"/>
          </front>
          <seriesInfo name="World Wide Web Consortium Recommendation" value="REC-xmlschema11-2-20120405"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols.  This document describes the syntax and semantics of version 1.1 of the YANG language.  YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification.  There are a small number of backward incompatibilities from YANG version 1.  This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </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="REGEX-CVE" target="https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=regex">
          <front>
            <title>CVE - Search Results</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC7493" target="https://www.rfc-editor.org/info/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">
      <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, 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>
      <t>The multi-character escapes (MCE) or the character classes built
around them used here can be substituted as shown in <xref target="tbl-sub"/>.</t>
      <table anchor="tbl-sub">
        <name>Substitutes for multi-character escapes in examples</name>
        <thead>
          <tr>
            <th align="left">MCE/class</th>
            <th align="left">Substitute class</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 and certainly is not actually meant
in the RFCs listed.</t>
    </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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
AdVIxv4f30PuNU9IAAA=

-->

</rfc>
