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 时,regexp 模式 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});