Flutter正则表达式递归匹配插件recursive_regex的使用
Flutter正则表达式递归匹配插件recursive_regex的使用
简介
recursive_regex
是一个实现了Dart中RegExp
类功能的包,它能够隔离分隔符之间的文本块,并将分隔模式应用到每个文本块上。因此,RecursiveRegex
类可以像 RegExp
一样使用。
使用方法
导入包
首先需要导入 recursive_regex
包:
import 'package:recursive_regex/recursive_regex.dart';
基本用法
RecursiveRegex
需要两个必须的参数:startDelimiter
和 endDelimiter
,它们都接受 RegExp
类型,不能为 null
,且不能有相同的模式。
final regex = RecursiveRegex(
startDelimiter: RegExp(r'<'),
endDelimiter: RegExp(r'>'),
);
这个 RecursiveRegex
如果应用到一个字符串上,会捕捉每一个由 <
和 >
字符分隔的文本块。
final input = 'a<b<c<d><e>f>g>h';
regex.allMatches(input); // ['<b<c<d><e>f>g>']
默认情况下,只匹配顶级分隔文本块。如果要匹配所有的分隔文本块(包括嵌套的),可以将 global
参数设置为 true
。
final input = '<a<b<c><d>>>';
final regex = RecursiveRegex(
startDelimiter: RegExp(r'<'),
endDelimiter: RegExp(r'>'),
global: true,
);
regex.allMatches(input); // ['<c>', '<d>', '<b<c><d>>', '<a<b<c><d>>>']
prepended & appended 模式
可以通过提供 prepended
和 appended
参数来指定模式,以排除任何未被提供的模式引导或跟随的匹配分隔符集。
final input = '0<a<b<1<c>2>3<d>>>';
final prepended = RecursiveRegex(
startDelimiter: RegExp(r'<'),
endDelimiter: RegExp(r'>'),
prepended: RegExp(r'[0-9]'),
global: true,
);
prepended.allMatches(input); // ['1<c>', '3<d>', '0<a<b<1<c>2>3<d>>>>']
final appended = RecursiveRegex(
startDelimiter: RegExp(r'<'),
endDelimiter: RegExp(r'>'),
appended: RegExp(r'[0-9]'),
global: true,
);
appended.allMatches(input); // ['<c>2', '<1<c>2>3']
final both = RecursiveRegex(
startDelimiter: RegExp(r'<'),
endDelimiter: RegExp(r'>'),
prepended: RegExp(r'[0-9]'),
appended: RegExp(r'[0-9]'),
global: true,
);
both.allMatches(input); // ['0<a<b<1<c>2>3<d>>>>']
inverseMatch
可以向 inverseMatch
参数提供一个模式,定义应匹配但不在分隔符内的模式。
final input = 'a<b<c<d><e>f>g>h';
final regex = RecursiveRegex(
startDelimiter: RegExp(r'<'),
endDelimiter: RegExp(r'>'),
inverseMatch: RegExp(r'[a-z]'),
global: true,
);
regex.allMatches(input); // ['a', 'h']
捕获组
通过提供 captureGroupName
给 RecursiveRegex
,可以在分隔符之间的文本块中捕获命名组。
final input = '<!ELEMENT [ some markup ]>';
final regex = RecursiveRegex(
startDelimiter: RegExp(r'<!(?<type>\w*)\s*\['),
endDelimiter: RegExp(r']]>'),
captureGroupName: 'value',
);
print(regex.firstMatch(input).namedGroup('value')); // ' some markup '
// 分隔符内部命名的组也可以调用。
print(regex.firstMatch(input).namedGroup('type')); // 'ELEMENT'
以上就是 recursive_regex
的基本使用方法,希望对您有所帮助。如果您有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter正则表达式递归匹配插件recursive_regex的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复