RegExp 构造函数
构建一个正则表达式。
如果 source
不遵循有效正则表达式语法,将抛出 FormatException。
如果你的代码启用了 multiLine
,则 ^
和 $
将分别匹配 行 的起始和结束,以及匹配输入的起始和结束。
如果你的代码禁用了 caseSensitive
,则 Dart 匹配时会忽略字母的大小写。例如,当禁用 caseSensitive
时,regexp 模式 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});