RegExp 构造函数

RegExp(
  1. String source, {
  2. bool multiLine = false,
  3. bool caseSensitive = true,
  4. @Since("2.4") bool unicode = false,
  5. @Since("2.4") bool dotAll = false,
})

构建一个正则表达式。

如果 source 不符合有效的正则表达式语法,则抛出 FormatException

如果您的代码启用了 multiLine,则 ^$ 将分别匹配 的开始和结束,以及输入的开始和结束。

如果您的代码禁用了 caseSensitive,则 Dart 在匹配时忽略字母的大小写。例如,当 caseSensitive 禁用时,正则表达式模式 a 匹配 aA

如果您的代码启用了 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});