| rfc9485.original.xml | rfc9485.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
| <!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
| <!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
| <!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
| <!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
| ]> | ]> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
| <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.37 (Ruby 3.2. | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
| 1) --> | -ietf-jsonpath-iregexp-08" number="9485" submissionType="IETF" category="std" co | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | nsensus="true" tocInclude="true" sortRefs="true" symRefs="true" updates="" obsol | |||
| -ietf-jsonpath-iregexp-08" category="std" consensus="true" submissionType="IETF" | etes="" xml:lang="en" version="3"> | |||
| tocInclude="true" sortRefs="true" symRefs="true" version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 3.17.4 --> | ||||
| <front> | <front> | |||
| <title abbrev="I-Regexp">I-Regexp: An Interoperable Regexp Format</title> | <title abbrev="I-Regexp">I-Regexp: An Interoperable Regular Expression Forma | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-iregexp-08"/> | t</title> | |||
| <seriesInfo name="RFC" value="9485"/> | ||||
| <author initials="C." surname="Bormann" fullname="Carsten Bormann"> | <author initials="C." surname="Bormann" fullname="Carsten Bormann"> | |||
| <organization>Universität Bremen TZI</organization> | <organization>Universität Bremen TZI</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Postfach 330440</street> | <street>Postfach 330440</street> | |||
| <city>Bremen</city> | <city>Bremen</city> | |||
| <code>D-28359</code> | <code>D-28359</code> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <phone>+49-421-218-63921</phone> | <phone>+49-421-218-63921</phone> | |||
| skipping to change at line 37 ¶ | skipping to change at line 37 ¶ | |||
| </author> | </author> | |||
| <author initials="T." surname="Bray" fullname="Tim Bray"> | <author initials="T." surname="Bray" fullname="Tim Bray"> | |||
| <organization>Textuality</organization> | <organization>Textuality</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <country>Canada</country> | <country>Canada</country> | |||
| </postal> | </postal> | |||
| <email>tbray@textuality.com</email> | <email>tbray@textuality.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2023" month="June" day="29"/> | <date year="2023" month="October"/> | |||
| <keyword>Internet-Draft</keyword> | <area>art</area> | |||
| <workgroup>jsonpath</workgroup> | ||||
| <keyword>Regexp</keyword> | ||||
| <keyword>Regex</keyword> | ||||
| <abstract> | <abstract> | |||
| <?line 67?> | ||||
| <t>This document specifies I-Regexp, a flavor of regular expressions that is | <t>This document specifies I-Regexp, a flavor of regular expression that is | |||
| limited in scope with the goal of interoperation across many different | limited in scope with the goal of interoperation across many different | |||
| regular-expression libraries.</t> | regular expression libraries.</t> | |||
| </abstract> | </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/bro | ||||
| wse/JSONPath/"/>. | ||||
| Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/JSONPat | ||||
| h/"/>. | ||||
| </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> | </front> | |||
| <middle> | <middle> | |||
| <?line 73?> | ||||
| <section anchor="intro"> | <section anchor="intro"> | |||
| <name>Introduction</name> | <name>Introduction</name> | |||
| <t>This specification describes an interoperable regular expression ("rege xp") flavor, I-Regexp.</t> | <t>This specification describes an interoperable regular expression (abbre viated as "regexp") flavor, I-Regexp.</t> | |||
| <t>I-Regexp does not provide advanced regular expression features such as capture groups, lookahead, or backreferences. | <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 re gular expression matches a given piece of text.</t> | It supports only a Boolean matching capability, i.e., testing whether a given re gular expression matches a given piece of text.</t> | |||
| <t>I-Regexp supports the entire repertoire of Unicode characters (Unicode | <t>I-Regexp supports the entire repertoire of Unicode characters (Unicode | |||
| scalar values); both the I-Regexp strings themselves and the strings | scalar values); both the I-Regexp strings themselves and the strings | |||
| they are matched against are sequences of Unicode scalar values (often | they are matched against are sequences of Unicode scalar values (often | |||
| represented in UTF-8 encoding form <xref target="RFC3629"/> for interchange).</t > | represented in UTF-8 encoding form <xref target="RFC3629"/> for interchange).</t > | |||
| <t>I-Regexp is a subset of XSD regular expressions <xref target="XSD-2"/>. </t> | <t>I-Regexp is a subset of XML Schema Definition (XSD) regular expressions <xref target="XSD-2"/>.</t> | |||
| <t>This document includes guidance for converting I-Regexps for use with s everal well-known regular expression idioms.</t> | <t>This document includes guidance for converting I-Regexps for use with s everal well-known regular expression idioms.</t> | |||
| <t>The development of I-Regexp was motivated by the work of the JSONPath W | <t>The development of I-Regexp was motivated by the work of the JSONPath W | |||
| orking Group. The Working Group wanted to include | orking Group (WG). The WG wanted to include support for the use of regular expre | |||
| in its specification <xref target="I-D.ietf-jsonpath-base"/> support for the use | ssions in JSONPath filters | |||
| of regular expressions in JSONPath filters, but was unable to find a useful | in its specification <xref target="I-D.ietf-jsonpath-base"/>, but was unable to | |||
| specification for regular expressions which would be interoperable across the po | find a useful | |||
| pular libraries.</t> | specification for regular expressions that would be interoperable across the pop | |||
| ular libraries.</t> | ||||
| <section anchor="terminology"> | <section anchor="terminology"> | |||
| <name>Terminology</name> | <name>Terminology</name> | |||
| <t>This document uses the abbreviation "regexp" for what are usually | <t>This document uses the abbreviation "regexp" for what is usually | |||
| called regular expressions in programming. | called a "regular expression" in programming. | |||
| "I-Regexp" is used as a noun meaning a character string (sequence of | The term "I-Regexp" is used as a noun meaning a character string (sequence of | |||
| Unicode scalar values) that conforms to the requirements | Unicode scalar values) that conforms to the requirements | |||
| in this specification; the plural is "I-Regexps".</t> | in this specification; the plural is "I-Regexps".</t> | |||
| <t>This specification uses Unicode terminology. | <t>This specification uses Unicode terminology; a good entry point is pr | |||
| A good entry point into that is provided by <xref target="UNICODE-GLOSSARY"/>.</ | ovided by <xref target="UNICODE-GLOSSARY"/>.</t> | |||
| t> | <t> | |||
| <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
| 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECO | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| MMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be i | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| nterpreted as | be interpreted as | |||
| described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
| only when, they | when, and only when, they appear in all capitals, as shown here. | |||
| appear in all capitals, as shown here.</t> | </t> | |||
| <?line -18?> | ||||
| <t>The grammatical rules in this document are to be interpreted as ABNF, | <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 | 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 val ues.</t> | <xref section="2.3" sectionFormat="of" target="RFC5234"/> are Unicode scalar val ues.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="objectives"> | <section anchor="objectives"> | |||
| <name>Objectives</name> | <name>Objectives</name> | |||
| <t>I-Regexps should handle the vast majority of practical cases where a | <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 | matching regexp is needed in a data-model specification or a query-language expr | |||
| language expression.</t> | ession.</t> | |||
| <t>The editors of this document conducted a survey of the regexp syntax | <t>At the time of writing, an editor of this document conducted a survey o | |||
| used in published RFCs. All examples found there should be covered by I-Regexps, | f the regexp syntax | |||
| used in recently published RFCs. All examples found there should be covered by I | ||||
| -Regexps, | ||||
| both syntactically and with their intended semantics. | both syntactically and with their intended semantics. | |||
| The exception is the use of multi-character escapes, for which | The exception is the use of multi-character escapes, for which | |||
| workaround guidance is provided in <xref target="mapping"/>.</t> | workaround guidance is provided in <xref target="mapping"/>.</t> | |||
| </section> | </section> | |||
| <section anchor="defn"> | <section anchor="defn"> | |||
| <name>I-Regexp Syntax</name> | <name>I-Regexp Syntax</name> | |||
| <t>An I-Regexp <bcp14>MUST</bcp14> conform to the ABNF specification in | <t>An I-Regexp <bcp14>MUST</bcp14> conform to the ABNF specification in | |||
| <xref target="iregexp-abnf"/>.</t> | <xref target="iregexp-abnf"/>.</t> | |||
| <figure anchor="iregexp-abnf"> | <figure anchor="iregexp-abnf"> | |||
| <name>I-Regexp Syntax in ABNF</name> | <name>I-Regexp Syntax in ABNF</name> | |||
| skipping to change at line 128 ¶ | skipping to change at line 117 ¶ | |||
| branch = *piece | branch = *piece | |||
| piece = atom [ quantifier ] | piece = atom [ quantifier ] | |||
| quantifier = ( "*" / "+" / "?" ) / range-quantifier | quantifier = ( "*" / "+" / "?" ) / range-quantifier | |||
| range-quantifier = "{" QuantExact [ "," [ QuantExact ] ] "}" | range-quantifier = "{" QuantExact [ "," [ QuantExact ] ] "}" | |||
| QuantExact = 1*%x30-39 ; '0'-'9' | QuantExact = 1*%x30-39 ; '0'-'9' | |||
| atom = NormalChar / charClass / ( "(" i-regexp ")" ) | atom = NormalChar / charClass / ( "(" i-regexp ")" ) | |||
| NormalChar = ( %x00-27 / "," / "-" / %x2F-3E ; '/'-'>' | NormalChar = ( %x00-27 / "," / "-" / %x2F-3E ; '/'-'>' | |||
| / %x40-5A ; '@'-'Z' | / %x40-5A ; '@'-'Z' | |||
| / %x5E-7A ; '^'-'z' | / %x5E-7A ; '^'-'z' | |||
| / %x7E-10FFFF ) | / %x7E-D7FF ; skip surrogate code points | |||
| / %xE000-10FFFF ) | ||||
| charClass = "." / SingleCharEsc / charClassEsc / charClassExpr | charClass = "." / SingleCharEsc / charClassEsc / charClassExpr | |||
| SingleCharEsc = "\" ( %x28-2B ; '('-'+' | SingleCharEsc = "\" ( %x28-2B ; '('-'+' | |||
| / "-" / "." / "?" / %x5B-5E ; '['-'^' | / "-" / "." / "?" / %x5B-5E ; '['-'^' | |||
| / %s"n" / %s"r" / %s"t" / %x7B-7D ; '{'-'}' | / %s"n" / %s"r" / %s"t" / %x7B-7D ; '{'-'}' | |||
| ) | ) | |||
| charClassEsc = catEsc / complEsc | charClassEsc = catEsc / complEsc | |||
| charClassExpr = "[" [ "^" ] ( "-" / CCE1 ) *CCE1 [ "-" ] "]" | charClassExpr = "[" [ "^" ] ( "-" / CCE1 ) *CCE1 [ "-" ] "]" | |||
| CCE1 = ( CCchar [ "-" CCchar ] ) / charClassEsc | CCE1 = ( CCchar [ "-" CCchar ] ) / charClassEsc | |||
| CCchar = ( %x00-2C / %x2E-5A ; '.'-'Z' | CCchar = ( %x00-2C / %x2E-5A ; '.'-'Z' | |||
| / %x5E-10FFFF ) / SingleCharEsc | / %x5E-D7FF ; skip surrogate code points | |||
| / %xE000-10FFFF ) / SingleCharEsc | ||||
| catEsc = %s"\p{" charProp "}" | catEsc = %s"\p{" charProp "}" | |||
| complEsc = %s"\P{" charProp "}" | complEsc = %s"\P{" charProp "}" | |||
| charProp = IsCategory | charProp = IsCategory | |||
| IsCategory = Letters / Marks / Numbers / Punctuation / Separators / | IsCategory = Letters / Marks / Numbers / Punctuation / Separators / | |||
| Symbols / Others | Symbols / Others | |||
| Letters = %s"L" [ ( %s"l" / %s"m" / %s"o" / %s"t" / %s"u" ) ] | Letters = %s"L" [ ( %s"l" / %s"m" / %s"o" / %s"t" / %s"u" ) ] | |||
| Marks = %s"M" [ ( %s"c" / %s"e" / %s"n" ) ] | Marks = %s"M" [ ( %s"c" / %s"e" / %s"n" ) ] | |||
| Numbers = %s"N" [ ( %s"d" / %s"l" / %s"o" ) ] | Numbers = %s"N" [ ( %s"d" / %s"l" / %s"o" ) ] | |||
| Punctuation = %s"P" [ ( %x63-66 ; 'c'-'f' | Punctuation = %s"P" [ ( %x63-66 ; 'c'-'f' | |||
| / %s"i" / %s"o" / %s"s" ) ] | / %s"i" / %s"o" / %s"s" ) ] | |||
| Separators = %s"Z" [ ( %s"l" / %s"p" / %s"s" ) ] | Separators = %s"Z" [ ( %s"l" / %s"p" / %s"s" ) ] | |||
| Symbols = %s"S" [ ( %s"c" / %s"k" / %s"m" / %s"o" ) ] | Symbols = %s"S" [ ( %s"c" / %s"k" / %s"m" / %s"o" ) ] | |||
| Others = %s"C" [ ( %s"c" / %s"f" / %s"n" / %s"o" ) ] | Others = %s"C" [ ( %s"c" / %s"f" / %s"n" / %s"o" ) ] | |||
| ]]></sourcecode> | ]]></sourcecode> | |||
| </figure> | </figure> | |||
| <t>As an additional restriction, <tt>charClassExpr</tt> is not allowed to | <t>As an additional restriction, <tt>charClassExpr</tt> is not allowed to | |||
| match <tt>[^]</tt>, which according to this grammar would parse as a | match <tt>[^]</tt>, which, according to this grammar, would parse as a | |||
| positive character class containing the single character <tt>^</tt>.</t> | positive character class containing the single character <tt>^</tt>.</t> | |||
| <t>This is essentially XSD regexp without character class | <t>This is essentially an XSD regexp without:</t> | |||
| subtraction, without multi-character escapes such as <tt>\s</tt>, | <ul><li>character class | |||
| <tt>\S</tt>, and <tt>\w</tt>, and without Unicode blocks.</t> | subtraction,</li> | |||
| <li>multi-character escapes such as <tt>\s</tt>, | ||||
| <tt>\S</tt>, and <tt>\w</tt>, and </li><li>Unicode blocks.</li></ul> | ||||
| <t>An I-Regexp implementation <bcp14>MUST</bcp14> be a complete implementa tion of this | <t>An I-Regexp implementation <bcp14>MUST</bcp14> be a complete implementa tion of this | |||
| limited subset. | limited subset. | |||
| In particular, full support for the Unicode functionality defined in | In particular, full support for the Unicode functionality defined in | |||
| this specification is <bcp14>REQUIRED</bcp14>; the implementation | this specification is <bcp14>REQUIRED</bcp14>. The implementation:</t> | |||
| <bcp14>MUST NOT</bcp14> limit itself to 7- or 8-bit character sets such as ASCII | <ul><li> | |||
| and | <bcp14>MUST NOT</bcp14> limit itself to 7- or 8-bit character sets such as ASCII | |||
| <bcp14>MUST</bcp14> support the Unicode character property set in character clas | , and</li> | |||
| ses.</t> | <li><bcp14>MUST</bcp14> support the Unicode character property set in character | |||
| classes.</li></ul> | ||||
| <section anchor="checking"> | <section anchor="checking"> | |||
| <name>Checking Implementations</name> | <name>Checking Implementations</name> | |||
| <t>A <em>checking</em> I-Regexp implementation is one that checks a supp lied | <t>A <em>checking</em> I-Regexp implementation is one that checks a supp lied | |||
| regexp for compliance with this specification and reports any problems. | regexp for compliance with this specification and reports any problems. | |||
| Checking implementations give their users confidence that they didn't | Checking implementations give their users confidence that they didn't | |||
| accidentally insert non-interoperable syntax, so checking is <bcp14>RECOMMENDED< /bcp14>. | accidentally insert syntax that is not interoperable, so checking is <bcp14>RECO MMENDED</bcp14>. | |||
| Exceptions to this rule may be made for low-effort implementations | Exceptions to this rule may be made for low-effort implementations | |||
| that map I-Regexp to another regexp library by simple steps such as | that map I-Regexp to another regexp library by simple steps such as | |||
| performing the mapping operations discussed in <xref target="mapping"/>; here, t | performing the mapping operations discussed in <xref target="mapping"/>. Here, | |||
| he | the | |||
| effort needed to do full checking may dwarf the rest of the | effort needed to do full checking might dwarf the rest of the | |||
| implementation effort. | implementation effort. | |||
| Implementations <bcp14>SHOULD</bcp14> document whether they are checking or not. </t> | Implementations <bcp14>SHOULD</bcp14> document whether or not they are checking. </t> | |||
| <t>Specifications that employ I-Regexp may want to define in which | <t>Specifications that employ I-Regexp may want to define in which | |||
| cases their implementations can work with a non-checking I-Regexp | cases their implementations can work with a non-checking I-Regexp | |||
| implementation and when full checking is needed, possibly in the | implementation and when full checking is needed, possibly in the | |||
| process of defining their own implementation classes.</t> | process of defining their own implementation classes.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="i-regexp-semantics"> | <section anchor="i-regexp-semantics"> | |||
| <name>I-Regexp Semantics</name> | <name>I-Regexp Semantics</name> | |||
| <t>This syntax is a subset of that of <xref target="XSD-2"/>. | <t>This syntax is a subset of that of <xref target="XSD-2"/>. | |||
| Implementations which interpret I-Regexps <bcp14>MUST</bcp14> | Implementations that interpret I-Regexps <bcp14>MUST</bcp14> | |||
| yield Boolean results as specified in <xref target="XSD-2"/>. | yield Boolean results as specified in <xref target="XSD-2"/>. | |||
| (See also <xref target="xsd-regexps"/>.)</t> | (See also <xref target="xsd-regexps"/>.)</t> | |||
| </section> | </section> | |||
| <section anchor="mapping"> | <section anchor="mapping"> | |||
| <name>Mapping I-Regexp to Regexp Dialects</name> | <name>Mapping I-Regexp to Regexp Dialects</name> | |||
| <t>The material in this section is non-normative, provided as guidance | <t>The material in this section is not normative; it is provided as guidan ce | |||
| to developers who want to use I-Regexps in the context of other | to developers who want to use I-Regexps in the context of other | |||
| regular expression dialects.</t> | regular expression dialects.</t> | |||
| <section anchor="multi-character-escapes"> | <section anchor="multi-character-escapes"> | |||
| <name>Multi-Character Escapes</name> | <name>Multi-Character Escapes</name> | |||
| <t>Common multi-character escapes (MCEs), and character classes built ar | <t>I-Regexp does not support common multi-character escapes (MCEs) and c | |||
| ound them, | haracter classes built around them. These can usually | |||
| which are not supported in I-Regexp, can usually | be replaced as shown by the examples in <xref target="tbl-sub"/>.</t> | |||
| be replaced as shown for example in <xref target="tbl-sub"/>.</t> | <table anchor="tbl-sub" align="center"> | |||
| <table anchor="tbl-sub"> | <name>Example Substitutes for Multi-Character Escapes</name> | |||
| <name>Example substitutes for multi-character escapes</name> | ||||
| <thead> | <thead> | |||
| <tr> | <tr> | |||
| <th align="left">MCE/class</th> | <th align="left">MCE/class:</th> | |||
| <th align="left">Replace with</th> | <th align="left">Replace with:</th> | |||
| </tr> | </tr> | |||
| </thead> | </thead> | |||
| <tbody> | <tbody> | |||
| <tr> | <tr> | |||
| <td align="left"> | <td align="left"> | |||
| <tt>\S</tt></td> | <tt>\S</tt></td> | |||
| <td align="left"> | <td align="left"> | |||
| <tt>[^ \t\n\r]</tt></td> | <tt>[^ \t\n\r]</tt></td> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| skipping to change at line 230 ¶ | skipping to change at line 225 ¶ | |||
| <tt>[^\t\n\r]</tt></td> | <tt>[^\t\n\r]</tt></td> | |||
| </tr> | </tr> | |||
| <tr> | <tr> | |||
| <td align="left"> | <td align="left"> | |||
| <tt>\d</tt></td> | <tt>\d</tt></td> | |||
| <td align="left"> | <td align="left"> | |||
| <tt>[0-9]</tt></td> | <tt>[0-9]</tt></td> | |||
| </tr> | </tr> | |||
| </tbody> | </tbody> | |||
| </table> | </table> | |||
| <t>Note that the semantics of <tt>\d</tt> in XSD regular expressions is | <t>Note that the semantics of <tt>\d</tt> in XSD regular expressions | |||
| that of | is that of <tt>\p{Nd}</tt>; however, this would include all Unicode | |||
| <tt>\p{Nd}</tt>; however, this would include all Unicode characters that are | characters that are digits in various writing systems, which is almost | |||
| digits in various writing systems, which is almost certainly not what is | certainly not what is required in IETF publications.</t> | |||
| required in IETF publications.</t> | ||||
| <t>The construct <tt>\p{IsBasicLatin}</tt> is essentially a reference to legacy | <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> | ASCII; it can be replaced by the character class <tt>[\u0000-\u007f]</tt>.</t> | |||
| </section> | </section> | |||
| <section anchor="xsd-regexps"> | <section anchor="xsd-regexps"> | |||
| <name>XSD Regexps</name> | <name>XSD Regexps</name> | |||
| <t>Any I-Regexp also is an XSD Regexp <xref target="XSD-2"/>, so the map | <t>Any I-Regexp is also an XSD regexp <xref target="XSD-2"/>, so the map | |||
| ping is an identity | ping is an identity | |||
| function.</t> | function.</t> | |||
| <t>Note that a few errata for <xref target="XSD-2"/> have been fixed in | ||||
| <xref target="XSD11-2"/>, which | <t>Note that a few errata for <xref target="XSD-2"/> have been fixed in | |||
| is therefore also included as a normative reference. | <xref target="XSD-1.1-2"/>; therefore, it | |||
| is also included in the <xref target="norm">Normative References</xref>. | ||||
| XSD 1.1 is less widely implemented than XSD 1.0, and implementations | 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 | of XSD 1.0 are likely to include these bugfixes; for the intents | |||
| and purposes of this specification an implementation of XSD 1.0 | and purposes of this specification, an implementation of XSD 1.0 | |||
| regexps is equivalent to an implementation of XSD 1.1 regexps.</t> | regexps is equivalent to an implementation of XSD 1.1 regexps.</t> | |||
| </section> | </section> | |||
| <section anchor="toESreg"> | <section anchor="toESreg"> | |||
| <name>ECMAScript Regexps</name> | <name>ECMAScript Regexps</name> | |||
| <t>Perform the following steps on an I-Regexp to obtain an ECMAScript | <t>Perform the following steps on an I-Regexp to obtain an ECMAScript | |||
| regexp <xref target="ECMA-262"/>:</t> | regexp <xref target="ECMA-262"/>:</t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>For any unescaped dots (<tt>.</tt>) outside character classes (fir | <li>For any unescaped dots (<tt>.</tt>) outside character classes | |||
| st alternative | (first alternative of <tt>charClass</tt> production), replace the dot | |||
| of <tt>charClass</tt> production): replace dot by <tt>[^\n\r]</tt>.</li> | with | |||
| <tt>[^\n\r]</tt>.</li> | ||||
| <li>Envelope the result in <tt>^(?:</tt> and <tt>)$</tt>.</li> | <li>Envelope the result in <tt>^(?:</tt> and <tt>)$</tt>.</li> | |||
| </ul> | </ul> | |||
| <t>The ECMAScript regexp is to be interpreted as a Unicode pattern ("u" | <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> | flag; see Section 21.2.2 "Pattern Semantics" of <xref target="ECMA-262"/>).</t> | |||
| <t>Note that where a regexp literal is required, | <t>Note that where a regexp literal is required, | |||
| the actual regexp needs to be enclosed in <tt>/</tt>.</t> | the actual regexp needs to be enclosed in <tt>/</tt>.</t> | |||
| </section> | </section> | |||
| <section anchor="pcre-re2-ruby-regexps"> | <section anchor="pcre-re2-ruby-regexps"> | |||
| <name>PCRE, RE2, Ruby Regexps</name> | <name>PCRE, RE2, and Ruby Regexps</name> | |||
| <t>Perform the same steps as in <xref target="toESreg"/> to obtain a val | ||||
| id regexp in | <t>To obtain a valid regexp in Perl Compatible Regular Expressions | |||
| PCRE <xref target="PCRE2"/>, the Go programming language <xref target="RE2"/>, a | (PCRE) <xref target="PCRE2"/>, the Go programming language's RE2 regexp libra | |||
| nd the Ruby | ry <xref target="RE2"/>, and the Ruby | |||
| programming language, except that the last step is:</t> | programming language, perform the same steps as in <xref target="toESreg"/>, exc | |||
| ept that the last step is:</t> | ||||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>Enclose the regexp in <tt>\A(?:</tt> and <tt>)\z</tt>.</li> | <li>Enclose the regexp in <tt>\A(?:</tt> and <tt>)\z</tt>.</li> | |||
| </ul> | </ul> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="background"> | <section anchor="background"> | |||
| <name>Motivation and Background</name> | <name>Motivation and Background</name> | |||
| <t>While regular expressions originally were intended to describe a | <t>While regular expressions originally were intended to describe a | |||
| formal language to support a Boolean matching function, they | formal language to support a Boolean matching function, they | |||
| have been enhanced with parsing functions that support the extraction | have been enhanced with parsing functions that support the extraction | |||
| and replacement of arbitrary portions of the matched text. With this | and replacement of arbitrary portions of the matched text. With this | |||
| accretion of features, parsing regexp libraries have become | accretion of features, parsing-regexp libraries have become | |||
| more susceptible to bugs and surprising performance degradations which | more susceptible to bugs and surprising performance degradations that | |||
| can be exploited in Denial of Service attacks by | can be exploited in denial-of-service attacks by | |||
| an attacker who controls the regexp submitted for | an attacker who controls the regexp submitted for | |||
| processing. I-Regexp is designed to offer interoperability, and to be | processing. I-Regexp is designed to offer interoperability and to be | |||
| less vulnerable to such attacks, with the trade-off that its only | less vulnerable to such attacks, with the trade-off that its only | |||
| function is to offer a boolean response as to whether a character | function is to offer a Boolean response as to whether a character | |||
| sequence is matched by a regexp.</t> | sequence is matched by a regexp.</t> | |||
| <section anchor="subsetting"> | <section anchor="subsetting"> | |||
| <name>Implementing I-Regexp</name> | <name>Implementing I-Regexp</name> | |||
| <t>XSD regexps are relatively easy to implement or map to widely | <t>XSD regexps are relatively easy to implement or map to widely | |||
| implemented parsing regexp dialects, with these notable | implemented parsing-regexp dialects, with these notable | |||
| exceptions:</t> | exceptions:</t> | |||
| <ul spacing="normal"> | <ul spacing="normal"> | |||
| <li>Character class subtraction. This is a very useful feature in man | <li>Character class subtraction. This is a very useful feature in | |||
| y | many specifications, but it is unfortunately mostly absent from | |||
| specifications, but it is unfortunately mostly absent from parsing | parsing-regexp dialects. Thus, it is omitted from I-Regexp.</li> | |||
| regexp dialects. Thus, it is omitted from I-Regexp.</li> | <li>Multi-character escapes. <tt>\d</tt>, <tt>\w</tt>, <tt>\s</tt> | |||
| <li>Multi-character escapes. <tt>\d</tt>, <tt>\w</tt>, <tt>\s</tt> an | and their uppercase complement classes exhibit a large amount of | |||
| d their uppercase | variation between regexp flavors. Thus, they are omitted from | |||
| complement classes exhibit a | I-Regexp.</li> | |||
| large amount of variation between regexp flavors. Thus, they are | <li>Not all regexp implementations support access to Unicode | |||
| omitted from I-Regexp.</li> | tables that enable executing constructs such as <tt>\p{Nd}</tt>, | |||
| <li>Not all regexp implementations | although the <tt>\p</tt>/<tt>\P</tt> feature in general is now quite | |||
| support accesses to Unicode tables that enable | widely available. While, in principle, it is possible to translate | |||
| executing constructs such as <tt>\p{Nd}</tt>, | these into character-class matches, this also requires access to | |||
| although the <tt>\p</tt>/<tt>\P</tt> feature in general is now quite | those tables. Thus, regexp libraries in severely constrained | |||
| widely available. While in principle it is possible to | environments may not be able to support I-Regexp conformance.</li> | |||
| 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> | </ul> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="iana-considerations"> | <section anchor="iana-considerations"> | |||
| <name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
| <t>This document makes no requests of IANA.</t> | <t>This document has no IANA actions.</t> | |||
| </section> | </section> | |||
| <section anchor="security-considerations"> | <section anchor="security-considerations"> | |||
| <name>Security considerations</name> | <name>Security Considerations</name> | |||
| <t>While technically out of scope of this specification, Section <xref tar | <t>While technically out of the scope of this specification, Section <xref | |||
| get="RFC3629" section="10" sectionFormat="bare">Security Considerations</xref> o | target="RFC3629" section="10" sectionFormat="bare">"Security Considerations"</x | |||
| f <xref target="RFC3629"/> applies to implementations. | ref> of <xref target="RFC3629"/> applies to implementations. | |||
| Particular note needs to be taken of the last paragraph of Section <xref target= | Particular note needs to be taken of the last paragraph of Section <xref target= | |||
| "RFC3629" section="3" sectionFormat="bare">UTF-8 definition</xref> of <xref targ | "RFC3629" section="3" sectionFormat="bare">"UTF-8 definition"</xref> of <xref ta | |||
| et="RFC3629"/>; an I-Regexp implementation may need to | rget="RFC3629"/>; an I-Regexp implementation may need to | |||
| mitigate limitations of the platform implementation in this regard.</t> | mitigate limitations of the platform implementation in this regard.</t> | |||
| <t>As discussed in <xref target="background"/>, more complex regexp librar ies may | <t>As discussed in <xref target="background"/>, more complex regexp librar ies may | |||
| contain exploitable bugs leading to crashes and remote code | contain exploitable bugs, which can lead to crashes and remote code | |||
| execution. There is also the problem that such libraries often have | execution. There is also the problem that such libraries often have | |||
| hard-to-predict performance characteristics, leading to attacks | performance characteristics that are hard to predict, leading to attacks | |||
| that overload an implementation by matching against an expensive | that overload an implementation by matching against an expensive | |||
| attacker-controlled regexp.</t> | attacker-controlled regexp.</t> | |||
| <t>I-Regexps have been designed to allow implementation in a way that is | <t>I-Regexps have been designed to allow implementation in a way that is | |||
| resilient to both threats; this objective needs to be addressed | resilient to both threats; this objective needs to be addressed | |||
| throughout the implementation effort. | throughout the implementation effort. Non-checking implementations (see <xref ta | |||
| Non-checking implementations (see <xref target="checking"/>) are likely to expos | rget="checking"/>) are likely to expose | |||
| e | ||||
| security limitations of any regexp engine they use, which may be less | security limitations of any regexp engine they use, which may be less | |||
| problematic if that engine has been built with security considerations | 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> | in mind (e.g., <xref target="RE2"/>). In any case, a checking implementation is still <bcp14>RECOMMENDED</bcp14>.</t> | |||
| <t>Implementations that specifically implement the I-Regexp subset can, | <t>Implementations that specifically implement the I-Regexp subset can, | |||
| with care, be designed to generally run in linear time and space in | with care, be designed to generally run in linear time and space in | |||
| the input, and to detect when that would not be the case (see below).</t> | the input and to detect when that would not be the case (see below).</t> | |||
| <t>Existing regexp engines should be able to easily handle most I-Regexps | <t>Existing regexp engines should be able to easily handle most I-Regexps | |||
| (after the adjustments discussed in <xref target="mapping"/>), but may consume | (after the adjustments discussed in <xref target="mapping"/>), but may consume | |||
| excessive resources for some types of I-Regexps or outright reject | excessive resources for some types of I-Regexps or outright reject | |||
| them because they cannot guarantee efficient execution. | them because they cannot guarantee efficient execution. | |||
| (Note that different versions of the same regexp library may be more or | (Note that different versions of the same regexp library may be more or | |||
| less vulnerable to excessive resource consumption for these cases.)</t> | less vulnerable to excessive resource consumption for these cases.)</t> | |||
| <t>Specifically, range quantifiers (as in <tt>a{2,4}</tt>) provide particu lar | <t>Specifically, range quantifiers (as in <tt>a{2,4}</tt>) provide particu lar | |||
| challenges for both existing and I-Regexp focused implementations. | challenges for both existing and I-Regexp focused implementations. | |||
| These may therefore limit range quantifiers in composability | Implementations may therefore limit range quantifiers in composability | |||
| (disallowing nested range quantifiers such as <tt>(a{2,4}){2,4}</tt>) or | (disallowing nested range quantifiers such as <tt>(a{2,4}){2,4}</tt>) or | |||
| range (disallowing very large ranges such as <tt>a{20,200000}</tt>), or detect | range (disallowing very large ranges such as <tt>a{20,200000}</tt>), or detect | |||
| and reject any excessive resource consumption caused by them.</t> | and reject any excessive resource consumption caused by range quantifiers.</t> | |||
| <t>I-Regexp implementations that are used to evaluate regexps from | <t>I-Regexp implementations that are used to evaluate regexps from | |||
| untrusted sources need to be robust to these cases. | untrusted sources need to be robust in these cases. | |||
| Implementers using existing regexp libraries are encouraged to check | Implementers using existing regexp libraries are encouraged:</t> | |||
| <ul> | ||||
| <li>to check | ||||
| their documentation to see if mitigations are configurable, such as | their documentation to see if mitigations are configurable, such as | |||
| limits in resource consumption, and to document their own degree of | limits in resource consumption, and</li> | |||
| robustness resulting from employing such mitigations.</t> | <li>to document their own degree of | |||
| robustness resulting from employing such mitigations.</li></ul> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <displayreference target="RFC3629" to="STD63"/> | ||||
| <displayreference target="I-D.ietf-jsonpath-base" to="JSONPATH-BASE"/> | ||||
| <references> | <references> | |||
| <name>References</name> | <name>References</name> | |||
| <references> | <references anchor="norm"> | |||
| <name>Normative References</name> | <name>Normative References</name> | |||
| <reference anchor="XSD-2" target="https://www.w3.org/TR/2004/REC-xmlsche ma-2-20041028/"> | <reference anchor="XSD-2" target="https://www.w3.org/TR/2004/REC-xmlsche ma-2-20041028/"> | |||
| <front> | <front> | |||
| <title>XML Schema Part 2: Datatypes Second Edition</title> | <title>XML Schema Part 2: Datatypes Second Edition</title> | |||
| <author fullname="Paul Biron" role="editor"/> | ||||
| <author fullname="Ashok Malhotra" role="editor"/> | <author fullname="Ashok Malhotra" role="editor"/> | |||
| <author fullname="Paul V. Biron" role="editor"/> | ||||
| <date day="28" month="October" year="2004"/> | <date day="28" month="October" year="2004"/> | |||
| </front> | </front> | |||
| <seriesInfo name="W3C REC" value="REC-xmlschema-2-20041028"/> | <seriesInfo name="W3C REC" value="REC-xmlschema-2-20041028"/> | |||
| <seriesInfo name="W3C" value="REC-xmlschema-2-20041028"/> | <seriesInfo name="W3C" value="REC-xmlschema-2-20041028"/> | |||
| </reference> | </reference> | |||
| <reference anchor="XSD11-2" target="https://www.w3.org/TR/2012/REC-xmlsc | ||||
| hema11-2-20120405/"> | <reference anchor="XSD-1.1-2" target="https://www.w3.org/TR/2012/REC-xml | |||
| schema11-2-20120405/"> | ||||
| <front> | <front> | |||
| <title>W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatype s</title> | <title>W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatype s</title> | |||
| <author fullname="Ashok Malhotra" role="editor"/> | ||||
| <author fullname="David Peterson" role="editor"/> | <author fullname="David Peterson" role="editor"/> | |||
| <author fullname="Shudi Gao" role="editor"/> | ||||
| <author fullname="Ashok Malhotra" role="editor"/> | ||||
| <author fullname="C. M. Sperberg-McQueen" role="editor"/> | ||||
| <author fullname="Henry Thompson" role="editor"/> | <author fullname="Henry Thompson" role="editor"/> | |||
| <author fullname="Michael Sperberg-McQueen" role="editor"/> | <author fullname="Paul Biron" role="editor"/> | |||
| <author fullname="Paul V. Biron" role="editor"/> | ||||
| <author fullname="Sandy Gao" role="editor"/> | ||||
| <date day="5" month="April" year="2012"/> | <date day="5" month="April" year="2012"/> | |||
| </front> | </front> | |||
| <seriesInfo name="W3C REC" value="REC-xmlschema11-2-20120405"/> | <seriesInfo name="W3C REC" value="REC-xmlschema11-2-20120405"/> | |||
| <seriesInfo name="W3C" value="REC-xmlschema11-2-20120405"/> | <seriesInfo name="W3C" value="REC-xmlschema11-2-20120405"/> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC5234"> | ||||
| <front> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml" | |||
| <title>Augmented BNF for Syntax Specifications: ABNF</title> | /> | |||
| <author fullname="D. Crocker" initials="D." role="editor" surname="C | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7405.xml" | |||
| rocker"> | /> | |||
| <organization/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml" | |||
| </author> | /> | |||
| <author fullname="P. Overell" initials="P." surname="Overell"> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml" | |||
| <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 A | ||||
| ugmented BNF (ABNF), has been popular among many Internet specifications. The c | ||||
| urrent specification documents ABNF. It balances compactness and simplicity with | ||||
| reasonable representational power. The differences between standard BNF and AB | ||||
| NF involve naming rules, repetition, alternatives, order-independence, and value | ||||
| ranges. This specification also supplies additional rule definitions and encod | ||||
| ing for a core lexical analyzer of the type common to several Internet specifica | ||||
| tions. [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 Ba | ||||
| ckus-Naur Form) to include a way to specify US-ASCII string literals that are ma | ||||
| tched 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</tit | ||||
| le> | ||||
| <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 sig | ||||
| nify the requirements in the specification. These words are often capitalized. | ||||
| This document defines these words as they should be interpreted in IETF document | ||||
| s. 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</ti | ||||
| tle> | ||||
| <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 protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t 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> | |||
| <references> | <references> | |||
| <name>Informative References</name> | <name>Informative References</name> | |||
| <reference anchor="RFC3629"> | ||||
| <front> | ||||
| <title>UTF-8, a transformation format of ISO 10646</title> | ||||
| <author fullname="F. Yergeau" initials="F." surname="Yergeau"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="November" year="2003"/> | ||||
| <abstract> | ||||
| <t>ISO/IEC 10646-1 defines a large character set called the Univer | ||||
| sal Character Set (UCS) which encompasses most of the world's writing systems. | ||||
| The originally proposed encodings of the UCS, however, were not compatible with | ||||
| many current applications and protocols, and this has led to the development of | ||||
| UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the | ||||
| full US-ASCII range, providing compatibility with file systems, parsers and othe | ||||
| r software that rely on US-ASCII values but are transparent to other values. Th | ||||
| is memo obsoletes and replaces RFC 2279.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="STD" value="63"/> | ||||
| <seriesInfo name="RFC" value="3629"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3629"/> | ||||
| </reference> | ||||
| <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="10" month="June" year="2023"/> | ||||
| <abstract> | ||||
| <t> JSONPath defines a string syntax for selecting and extractin | ||||
| g JSON | ||||
| (RFC 8259) values from a JSON value. | ||||
| </t> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml" | |||
| </abstract> | /> | |||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-14"/ | <!-- [I-D.ietf-jsonpath-base] Edit state as of 10/9/23; long form to include "Ed | |||
| > | ." roles. --> | |||
| </reference> | ||||
| <reference anchor="I-D.ietf-jsonpath-base" target="https://datatracker.ietf.org/ | ||||
| doc/html/draft-ietf-jsonpath-base-20"> | ||||
| <front> | ||||
| <title>JSONPath: Query expressions for JSON</title> | ||||
| <author initials="S." surname="Gössner" fullname="Stefan Gössner" role="editor"> | ||||
| <organization>Fachhochschule Dortmund</organization> | ||||
| </author> | ||||
| <author initials="G." surname="Normington" fullname="Glyn Normington" role="edit | ||||
| or"> | ||||
| </author> | ||||
| <author initials="C." surname="Bormann" fullname="Carsten Bormann" role="editor" | ||||
| > | ||||
| <organization>Universität Bremen TZI</organization> | ||||
| </author> | ||||
| <date month="August" day="25" year="2023"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-jsonpath-base-20"/> | ||||
| </reference> | ||||
| <reference anchor="UNICODE-GLOSSARY" target="https://unicode.org/glossar y/"> | <reference anchor="UNICODE-GLOSSARY" target="https://unicode.org/glossar y/"> | |||
| <front> | <front> | |||
| <title>Glossary of Unicode Terms</title> | <title>Glossary of Unicode Terms</title> | |||
| <author> | <author> | |||
| <organization>Unicode, Inc.</organization> | <organization>Unicode, Inc.</organization> | |||
| </author> | </author> | |||
| <date/> | <date/> | |||
| </front> | </front> | |||
| </reference> | </reference> | |||
| <reference anchor="RE2" target="https://github.com/google/re2"> | <reference anchor="RE2" target="https://github.com/google/re2"> | |||
| <front> | <front> | |||
| <title>RE2 is a fast, safe, thread-friendly alternative to backtrack | <title>RE2 is a fast, safe, thread-friendly alternative to | |||
| ing regular expression engines like those used in PCRE, Perl, and Python. It is | backtracking regular expression engines like those used in PCRE, | |||
| a C++ library.</title> | Perl, and Python. It is a C++ library.</title> | |||
| <author> | <author> | |||
| <organization/> | <organization/> | |||
| </author> | </author> | |||
| <date>n.d.</date> | ||||
| </front> | </front> | |||
| <refcontent>commit 73031bb</refcontent> | ||||
| </reference> | </reference> | |||
| <reference anchor="PCRE2" target="http://pcre.org/current/doc/html/"> | <reference anchor="PCRE2" target="http://pcre.org/current/doc/html/"> | |||
| <front> | <front> | |||
| <title>Perl-compatible Regular Expressions (revised API: PCRE2)</tit le> | <title>Perl-compatible Regular Expressions (revised API: PCRE2)</tit le> | |||
| <author> | <author> | |||
| <organization/> | <organization/> | |||
| </author> | </author> | |||
| <date>n.d.</date> | ||||
| </front> | </front> | |||
| </reference> | </reference> | |||
| <reference anchor="ECMA-262" target="https://www.ecma-international.org/ wp-content/uploads/ECMA-262.pdf"> | <reference anchor="ECMA-262" target="https://www.ecma-international.org/ wp-content/uploads/ECMA-262.pdf"> | |||
| <front> | <front> | |||
| <title>ECMAScript 2020 Language Specification</title> | <title>ECMAScript 2020 Language Specification</title> | |||
| <author> | <author> | |||
| <organization>Ecma International</organization> | <organization>Ecma International</organization> | |||
| </author> | </author> | |||
| <date year="2020" month="June"/> | <date year="2020" month="June"/> | |||
| </front> | </front> | |||
| <seriesInfo name="ECMA" value="Standard ECMA-262, 11th Edition"/> | <refcontent>Standard ECMA-262, 11th Edition</refcontent> | |||
| </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 J | ||||
| SON 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> | </reference> | |||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7493.xml" | ||||
| /> | ||||
| </references> | </references> | |||
| </references> | </references> | |||
| <?line 387?> | ||||
| <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><)|(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"> | <section numbered="false" anchor="acknowledgements"> | |||
| <name>Acknowledgements</name> | <name>Acknowledgements</name> | |||
| <t>This specification has been motivated by the discussion in the IETF JSO | <t>Discussion in the IETF | |||
| NPATH | JSONPATH WG about whether to include a regexp mechanism into the | |||
| WG about whether to include a regexp mechanism into the JSONPath query | JSONPath query expression specification and previous | |||
| expression specification, as well as by previous discussions about the | discussions about the YANG <tt>pattern</tt> and Concise Data | |||
| YANG <tt>pattern</tt> and CDDL <tt>.regexp</tt> features.</t> | Definition Language (CDDL) <tt>.regexp</tt> | |||
| <t>The basic approach for this specification was inspired by <xref target= | features motivated this specification.</t> | |||
| "RFC7493">The | <t>The basic approach for this specification was inspired by "<xref | |||
| I-JSON Message Format</xref>.</t> | target="RFC7493" format="title"></xref>" <xref target="RFC7493" format="de | |||
| fault"/>.</t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| <!-- ##markdown-source: | ||||
| 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 | ||||
| </rfc> | </rfc> | |||
| End of changes. 77 change blocks. | ||||
| 563 lines changed or deleted | 224 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||