NIST XML Schema conformance test suite: generalized regular expressions for the pattern facet.

The generalized regular expressions from which pattern specifications are derived for the various types are as follows:

decimal::= \-?\d{0,t-f}(\.\d{1,f})?
	Where:
	\- is the optional negative sign
	\d is any digit (same as [0-9]);
 	\. represents the decimal point;
	t is the total number of digits in the string (ie the value of the totalDigits facet);
	f is the number of digits in the fractional part of the number (ie the value of
	the fractionDigits facet).

	This pattern applies to decimal and all its derivatives, in combination with any
        	further constraints (e.g. for integer, fractionDigits must == 0).

gYear::= [1970-2030]

gYearMonth::= gYear \-((0,[1-9]) | (1,[0-2]))

date::= gYearMonth \-(([0-2],[0-9])|(3,[0-1]))

                Note: Dates such as February 31 are disallowed.

time::= (([0-1],[0-9])|(2,[0-3])) ':' ([0-5],[0-9]) ':' ([0-5],[0-9])

dateTime::= date 'T' time

                Note: Dates such as February 31 are disallowed.

gMonthDay::= \-\-((0,[1-9]) | (1,[0-2]))\-(([0-2],[0-9])|(3,[0-1]))

gDay::= \-\-\-(([0-2],[0-9])|(3,[0-1]))

gMonth::= \-\-((0,[1-9]) | (1,[0-2]))\-\-

duration::= 'P' [1970-2030] 'Y' ((0,[1-9]) | (1,[0-2])) 'M' (([0-2],[0-9])|(3,[0-1])) 'DT' (([0-1],[0-9])|(2,[0-3])) 'H' ([0-5],[0-9]) 'M' ([0-5],[0-9]) 'S'

double::= decimal 'E' [(-1075)-970]

float::= decimal 'E' [(-149)-104]

string::= \d{1, 5}\s([A-Z][a-z]{1, 20}\s){1, 5} 'Street' \n([A-Z][a-z]{1, 20}\s){1, 3},[A-Z]{2}\s\d{5}(\-\d{4})?

normalizedString::= \d{1, 5}\s([A-Z][a-z]{1, 20}\s){1, 5} 'Street' ([A-Z][a-z]{1, 20}\s){1, 3},[A-Z]{2}\s\d{5}(\-\d{4})?


token::= normalizedString

language::= ([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1, 8})(-[a-zA-Z]{1, 8})*

Name::= \i\c*

NCName::= Name

	Note: ":" is disallowed.

ID::= NCName

boolean::= [0|1|true|false]

base64Binary::= [a-zA-Z0-9+/]+

hexBinary::= [0-9A-F]+

anyURI::= [http://|http://www.|ftp://|ftp://ftp.|telnet://|gopher://](\c+)[.com|.edu|.org|.gov]

QName::= (NCName ':')?NCName