regex_builder 0.1.0+2
regex_builder: ^0.1.0+2 copied to clipboard
A declarative builder for Regex.
A declarative builder for Regex.
Features #
A declarative builder for Regex.
Getting started #
Usage #
final usernameRegex = Regex.builder(
components: [
Anchor.startOfLine, // ^
Repeat(
CharacterClass.union([
CharacterClass.letter(LetterCase.lower), // [a-z]
CharacterClass.number(), // [0-9]
CharacterClass('_-'), // [_-]
]), // [a-z0-9_-]
range: RepeatRange.between(3, 16),
), // [a-z0-9_-]{3,16}
Anchor.endOfLine, // $
],
); // ^[a-z0-9_-]{3,16}$
final letterAndNumbers = CharacterClass.union([
CharacterClass.letter(LetterCase.lower), // [a-z]
CharacterClass.number(), // [0-9]
]); // [a-z0-9]
final regex = Regex.builder(
components: [
Anchor.startOfLine, // ^
OneOrMore(
CharacterClass.union([
letterAndNumbers, // [a-z0-9]
CharacterClass.dot, // [.]
]), // [a-z0-9.]
), // [a-z0-9.]+
Regex.literal('@'), // @
OneOrMore(letterAndNumbers), // [a-z0-9]+
Regex.literal('.'), // \.
OneOrMore(
CharacterClass.letter(LetterCase.lower) // [a-z]
), // [a-z]+
Optionally(Regex.builder(
components: [
Regex.literal('.'), // \.
OneOrMore(
CharacterClass.letter(LetterCase.lower) // a-z
), // [a-z]+
],
)), // (?:\.[a-z])+?
Anchor.endOfLine, // $
],
caseSensitive: false,
multiLine: true,
); // ^[a-z0-9.]+@[a-z0-9]+\.[a-z]+(?:\.[a-z]+)?$
final regex = Regex.builder(components: [
Regex.builder(components: [
Regex.literal('<'), // <
Capture(
Regex.builder(
components: [
CharacterClass.letter(LetterCase.lower), // [a-z]
ZeroOrMore(
CharacterClass.union([
CharacterClass.letter(), // [a-zA-Z]
CharacterClass.number(), // [0-9]
]), // [a-zA-Z0-9]
), // [a-zA-Z0-9]*
],
), // [a-z][a-zA-Z0-9]*
name: 'tag',
), // (?<tag>[a-z][a-zA-Z0-9]*)?
Regex.literal('>'), // >
]), // <(?<tag>[a-z][a-zA-Z0-9]*)>
Capture(
OneOrMore(Regex.any(), greedy: false), // .+?
), // (.+?)
Regex.literal('</'), // </
Reference('tag'), // \k<tag>
Regex.literal('>'), // >
]); // <(?<tag>[a-z][a-zA-Z0-9]*)>(.+?)</\k<tag>>
final html = '<h1>Hello, world!</h1><a>Google</a>';
for (final match in regex.allMatches(html)) {
print('Content: ${match.group(0)}');
print('Tag: ${match.group(1)}');
print('Value: ${match.group(2)}');
}
// Output
// Content: <h1>Hello, world!</h1>
// Tag: h1
// Value: Hello, world!
// Content: <a>Google</a>
// Tag: a
// Value: Google