正则表达式工具 |
grep |
语言和函数库 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery 和 XPath |
XRegExp |
数据库 |
MySQL |
Oracle |
PostgreSQL |
更多此网站内容 |
简介 |
正则表达式快速开始 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式范例 |
正则表达式参考 |
替换字符串参考 |
XQuery 和 XPath 正则表达式
XQuery 1.0 和 XPath 2.0 函数和操作符的 W3C 标准定义了三个函数 fn:matches
、fn:replace
和 fn:tokenize
,它们将正则表达式作为其中一个参数。XQuery 和 XPath 标准为此目的引入了新的正则表达式风格。此风格与 XML Schema 风格相同,但增加了许多现代正则表达式风格中可用的功能,而 XML Schema 风格中没有。所有有效的 XML Schema 正则表达式也都是有效的 XQuery/XPath 正则表达式。反之则不一定成立。
由于 XML Schema 风格仅用于真/假有效性测试,因此这些功能已因性能原因而移除。XQuery 和 XPath 函数运行更复杂的正则表达式操作符,需要功能更丰富的正则表达式风格。话虽如此,XQuery 和 XPath 正则表达式风格仍受到现代标准的限制。
XQuery 和 XPath 支持 XML Schema 风格中功能之上的下列功能
^
和$
锚点,与字符串的开头或结尾,或行的开头或结尾相符(请参阅下列的相符模式)。这是支持的仅有两个锚点。- 惰性量词,使用熟悉的问号语法。
- 反向引用和捕获组。XML Schema 标准支持群组,但群组一直是非截取的。XQuery/XPath 允许在正则表达式中使用反向引用。
fn:replaces
使用$1
表示法,在 替换文本 中支持反向引用。
XML Schema 完全不允许比对模式,而 XQuery 和 XPath 函数都接受一个选用的 flags
参数来设置比对模式。正则表达式内的 模式修改器 不受支持。这四种比对模式可用
i
使正则表达式比对不区分大小写。s
激活「单行模式」。在此模式中,点号比对换行符。m
激活「多行模式」。在此模式中,插入符号和美元符号在主旨字符串中的换行符号前后比对。x
激活「自由间距模式」。在此模式中,正则表达式标记之间的空白会被忽略。不支持注解。
旗标指定为一个字符串,其中包含您想要激活的模式字母。例如 "ix"
激活不区分大小写和自由间距。如果您不想设置任何比对模式,您可以传递一个空字符串给 flags
参数,或完全省略该参数。
三个正则表达式函数
fn:matches(subject, pattern, flags)
将主旨字符串和正则表达式作为输入。如果正则表达式比对主旨字符串的任何部分,函数会传回 true。如果完全无法比对,它会传回 false。如果您只想要在正则表达式比对整个主旨字符串时,函数传回 true,您需要使用 插入符号。
fn:replace(subject, pattern, replacement, flags)
将主旨字符串、正则表达式和替换字符串作为输入。它传回一个新的字符串,其中主旨字符串中所有与正则表达式模式比对的部分都已替换为替换文本。您可以使用 $1
到 $99
将捕获组重新插入替换中。$0
插入整个正则表达式比对。替换中的字面美元符号和反斜线必须用反斜线转义。
fn:replace
无法替换长度为零的比对。例如,fn:replace("test", "^", "prefix")
会引发错误,而不是像大多数编程语言中的基于正则表达式的搜索和替换一样传回「prefixtext」。
fn:tokenize(subject, pattern, flags)
类似于许多编程语言中的「分割」函数。它传回一个字符串数组,其中包含主旨中所有正则表达式比对之间的所有子字符串。数组不会包含正则表达式比对本身。如果正则表达式比对主旨字符串中的第一个或最后一个字符,则结果数组中的第一个或最后一个字符串将为空字符串。
fn:tokenize
也无法处理长度为 0 的正则表达式比对。