Three XQuery functions use regular expressions: matches
, replace
, and tokenize
. Each of these functions accepts a $flags
argument that allows for additional options in the interpretation of the regular expression, such as multi-line processing and case insensitivity. Options are indicated by single letters; the $flags
argument is a string that can include any of the valid letters in any order, and duplicates are allowed.
The $flags
argument allows four options:
s
The letter s
indicates dot-all mode, which affects the period wildcard (.
). (This is known as single-line mode in Perl.) This means that the period wildcard matches any character whatsoever, including the line feed (#xA
) character. If the letter s
is not specified, the period wildcard matches any character except the line feed (#xA
) character.
m
The letter m
indicates multi-line mode, which affects anchors. In multi-line mode, the ^ and $ characters match the beginning and end of a line, as well as the beginning and end of the whole string.
i
The letter i
indicates case-insensitive mode. This means that matching does not distinguish between normal characters that are case variants of each other, as defined by Unicode. For example, in case-insensitive mode, [a-z]
matches the lowercase letters a through z, uppercase letters A through Z, and a few other characters such as a Kelvin sign. The meaning of category escapes such as p{Lu}
is not affected.
x
The letter x
indicates that whitespace characters within regular expressions should be ignored. This is useful for making long regexes readable by splitting over many lines. If x
is not specified, whitespace characters are considered to be significant and to match those in the string. If you want to represent significant whitespace when using the x
flag, you can use the multi-character escape s
.
If no flag options are desired, you should either pass a zero-length string, or omit the $flags
argument entirely. Table 18-15 shows some examples that use the $flags
argument, which is the third argument of the matches
function. They assume that the variable $address
is bound to the following string (the line break is significant):
123 Main Street Traverse City, MI 49684
Table 18-15. Examples of the $flags argument
Example |
Return value |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.12.108.175