RegExp 构造函数
构建一个正则表达式。
如果 source
不符合有效的正则表达式语法,则抛出 FormatException。
如果您的代码启用了 multiLine
,则 ^
和 $
将分别匹配 行 的开始和结束,以及输入的开始和结束。
如果您的代码禁用了 caseSensitive
,则 Dart 在匹配时忽略字母的大小写。例如,当 caseSensitive
禁用时,正则表达式模式 a
匹配 a
和 A
。
如果您的代码启用了 unicode
,则 Dart 根据 ECMAScript 标准将模式视为 Unicode 模式。
如果您的代码启用了 dotAll
,则 .
模式将匹配 所有 字符,包括行终止符。
示例
final wordPattern = RegExp(r'(\w+)');
final digitPattern = RegExp(r'(\d+)');
这些示例使用原始字符串作为参数。您应优先使用原始字符串作为 RegExp 构造函数的参数,因为它使得将 \
和 $
字符编写为正则表达式保留字符变得容易。
使用非原始字符串编写的相同示例将是
final wordPattern = RegExp('(\\w+)'); // Should be raw string.
final digitPattern = RegExp('(\\d+)'); // Should be raw string.
仅当您需要使用字符串插值时才使用非原始字符串。例如
Pattern keyValuePattern(String keyIdentifier) =>
RegExp('$keyIdentifier=(\\w+)');
当像这样将字符串直接包含到正则表达式模式中时,请注意该字符串不包含正则表达式保留字符。如果存在这种风险,请使用 escape 函数将那些字符转换为保留字符的安全版本,并仅匹配该字符串本身
Pattern keyValuePattern(String anyStringKey) =>
RegExp('${RegExp.escape(anyStringKey)}=(\\w+)');
实现
external factory RegExp(String source,
{bool multiLine = false,
bool caseSensitive = true,
@Since("2.4") bool unicode = false,
@Since("2.4") bool dotAll = false});