XML Schema/XQuery & XPath中的正则表达式

Manipulation
WE 2011-02-04 字数 4866

http://www.regular-expressions.info/xml.html

摘要一下:

在Schema定义的场景中,正则表达式主要被用来验证Validate,一般不会被用于匹配match的。

不支持的功能:

1,没有^$(默认带上)

2,没有词分界符 word boundaries

3,没有lookaround

4,.缺省匹配单行,如匹配多行可用[\s\S]*regex[\s\S]*

5,没法指定匹配模式(比如单行多行,忽略大小写)

6,不接收\xFF或\uFFFF格式的字符,允许 格式

7,没有贪婪greedy懒惰lazy模式(.+?或.+等)

支持的功能:

1,Character classes, including shorthands, ranges and negated classes.

2,Character class subtraction.

3,The dot, which matches any character except line breaks.

4,Alternation and groups.

5,Greedy quantifiers ?, *, + and {n,m}

6,Unicode properties and blocks

特性:

1,特殊的XML Character classes:\i [_:A-Za-z]. \c [-._:A-Za-z0-9] \I反义 \C反义

\i是XML元素名首字母,\c是元素名其他字母。\i\c*是合法的XML element name。

2,支持集合运算比如[a-z-[aeiou]]是辅音[\p{L}-[\p{IsBasicLatin}]]英文字母之外的拉丁字母

XQuery & XPath中的正则表达式比Schema中的功能强大。

http://www.regular-expressions.info/xpath.html

======================================================

XML Schema Regular Expressions

The W3C XML Schema standard defines its own regular expression flavor. You can use it in the

pattern facet of simple type definitions in your XML schemas. E.g. the following defines the

simple type "SSN" using a regular expression to require the element to contain a valid US

social security number.

<xsd:simpleType name="SSN">

<xsd:restriction base="xsd:token">

<xsd:pattern value="[0-9]{3}-[0-9]{2}-[0-9]{4}"/>

</xsd:restriction>

</xsd:simpleType>

Compared with other regular expression flavors, the XML schema flavor is quite limited in

features. Since it's only used to validate whether an entire element matches a pattern or

not, rather than for extracting matches from large blocks of data, you won't really miss the

features often found in other flavors. The limitations allow schema validators to be

implemented with efficient text-directed engines.

Particularly noteworthy is the complete absence of anchors like the caret and dollar, word

boundaries and lookaround. XML schema always implicitly anchors the entire regular

expression. The regex must match the whole element for the element to be considered valid. If

you have the pattern regexp, the XML schema validator will apply it in the same way as say

Perl, Java or .NET would do with the pattern ^regexp$. If you want to accept all elements

with regex somewhere in the middle of their contents, you'll need to use the regular

expression .*regex.*. The to .* expand the match to cover the whole element, assuming it

doesn't contain line breaks. If you want to allow line breaks, you can use something like

[\s\S]*regex[\s\S]*. Combining a shorthand character class with its negated version results

in a character class that matches anything.

XML schemas do not provide a way to specify matching modes. The dot never matches line

breaks, and patterns are always applied case sensitively. If you want to apply literal case

insensitively, you'll need to rewrite it as [lL][iI][tT][eE][rR][aA][lL].

XML regular expressions don't have any tokens like \xFF or \uFFFF to match particular (non-

printable) characters. You can use the &#xFFFF; XML syntax for this, or simply copy the

character directly from a character map.

Lazy quantifiers are not available. Since the pattern is anchored at the start and the end of

the subject string anyway, and only a success/failure result is returned, the only potential

difference between a greedy and lazy quantifier would be performance. You can never make a

fully anchored pattern match or fail by changing a greedy quantifier into a lazy one or vice

versa.

XML Schema regular expressions support the following:

Character classes, including shorthands, ranges and negated classes.

Character class subtraction.

The dot, which matches any character except line breaks.

Alternation and groups.

Greedy quantifiers ?, *, + and {n,m}

Unicode properties and blocks

Note that the regular expression functions available in XQuery and XPath use a different

regular expression flavor. This flavor is a superset of the XML Schema flavor described here.

It adds some of the features that are available in many modern regex flavors, but not in the

XML Schema flavor.

XML Character Classes

Despite its limitations, XML schema regular expressions introduce two handy features. The

special short-hand character classes \i and \c make it easy to match XML names. No other

regex flavor supports these.

Character class subtraction makes it easy to match a character that is in a certain list, but

not in another list. E.g. [a-z-[aeiou]] matches an English consonant. This feature is now

also available in the JGsoft and .NET regex engines. It is particularly handy when working

with Unicode properties. E.g. [\p{L}-[\p{IsBasicLatin}]] matches any letter that is not an

English letter.

XML 可扩展置标语言