Grammar

XPattern grammar

The following defines the grammar of the XPattern:

<pattern> ::= <orlist> | <orlist> ':' <pattern>

<orlist> ::= <node> | <node> '|' <orlist>

<node> ::= <elementname> <opt-cardinality> <opt-assignment> <opt-modifierlist>
           <opt-attrlist> <opt-childnodes> <opt-negation> |
      '(' <pattern> ')' <opt-cardinality> <opt-assignment>

<elementname> ::= <name> | "any" | "#text" | "#comment"

<opt-attrlist> ::= "" | "[" <attrlist> "]"

<attrlist> ::= <attr> | <attr> "," <attrlist>

<attr> ::= "@" <name> <opt-relation> <opt-assignment> | <regexp>

<opt-relation> ::= "" | <compare> <value>

<compare> ::= "=" | "~"

<opt-modifierlist> ::= "" | <modifier> <opt-modifierlist>

<modifier> ::= "-html" | "-xml" | "-textcontent" | "-whitespace"

<opt-childnodes> ::= "" | "{" <pattern> "}"

<opt-assignment> ::= "" | "$" <name>

<opt-cardinality> ::= "" | <plain-cardinality> | <plain-cardinality> <nongreedy>

<plain-cardinality> ::=  "?" | "*" | "+"

<nongreedy> ::= "?"

<regexp> ::= "/" <span class="caps">STRING</span> "/"

<value> ::= <span class="caps">INTEGER</span> | "\"" <span class="caps">STRING</span> "\""

<opt-negation> ::= "" | "!" <node>

<name> ::= <span class="caps">HTML</span>-friendly name, i.e. string starting with a-z followed by a-z0-9_. Match is case-insensitive.
Whitespace is generally ignored