Pakete, Repositories und App-Kategorien suchen

Paketdetailsv1.0.0

recursive_regex

Eine Implementierung von RegExp, die abgegrenzte Textblöcke isoliert und das Muster jeweils separat auf jeden Block anwendet.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
12.500
Likes
10
Pub-Punkte
130

Paket installieren

flutter pub add recursive_regex

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Ein Flutter/Dart-Paket, das die RegExp-Funktionalität erweitert, um durchgehend markierte Textblöcke rekursiv zu analysieren und zu verarbeiten, beispielsweise verschachtelte Klammern oder benutzerdefinierte Trennzeichen. Es wendet ein Muster unabhängig auf jeden isolierten Block an, was eine präzise Extraktion und Transformation strukturierter Texte innerhalb komplexer Zeichenketten ermöglicht. Ideal für die Analyse verschachtelter Syntax wie Vorlagen, Ausdrücke oder Markup-Sprachen. Die Implementierung unterstützt mehrere Plattformen, einschließlich Mobilgeräte, Web und Desktop, was sie vielseitig für plattformübergreifende Anwendungen mit fortgeschrittener Textmanipulation macht.

Anwendungsfälle

  • Analyse verschachtelter Vorlagen
  • Extrahieren von Inhalten aus begrenzten Blöcken
  • Verarbeitung strukturierter Texte mit Rekursion
  • Benutzerdefinierte DSLs implementieren
  • Behandlung verschachtelter Ausdrücke im Code
  • Textumwandlung in mehrschichtigen Zeichenketten

Hauptmerkmale

  • rekursives Block-Isolieren
  • Unabhängige Musteranwendung pro Block
  • Unterstützung für benutzerdefinierte Trennzeichen
  • Plattformübergreifende Kompatibilität
  • Einfache API-Integration
  • Effiziente Textverarbeitung

Geeignet für

  • Entwickler, die Template-Engines erstellen
  • Werkzeuge, die eine verschachtelte Textanalyse erfordern
  • Anwendungen mit strukturierten Zeichenfolgendaten
  • DSL- oder Sprachparser-Implementierungen
  • Texteditor oder Code-Analysatoren

Hinweise

  • Kann tief verschachtelte Strukturen möglicherweise nicht effizient verarbeiten
  • Erfordert sorgfältige Gestaltung des Trennzeichens
  • Die Leistung hängt von der Eingabekomplexität ab
  • Beschränkt auf textbasierte Muster
  • Nicht geeignet für nicht-rekursive Analyseanforderungen
  • Möglicher Stack-Overflow bei extremer Verschachtelung

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

recursive_regex

pub package

An implementation of Dart's RegExp class that isolates delimited blocks of text and applies the delimited pattern to each block separately.

The [RecursiveRegex] class implements Dart's [RegExp] class. As such, it has all of the same methods as [RegExp] and can be used interchangeably with [RegExp]s.

Usage

import 'package:recursive_regex/recursive_regex.dart';

[RecursiveRegex] has 2 required parameters, [startDelimiter] and [endDelimiter]. Both accept a [RegExp], must not be null, and must not have identical patterns.

final regex = RecursiveRegex(
  startDelimiter: RegExp(r'<'),
  endDelimiter: RegExp(r'>'),
);

This [RecursiveRegex], if applied to a string, would capture every block of text delimited by the < and > characters.

final input = 'a<b<c<d><e>f>g>h';
regex.allMatches(input); // ['<b<c<d><e>f>g>']

By default, only top-level blocks of delimited text are matched. To match every block of delimited text, nested or not, [global] can be flagged 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>>>']

Delimited blocks of text are matched in the order that they're closed.

Note: [RecursiveRegex] is not optimized for parsing strings that do not contain nested blocks of delimited text, [RegExp] would be more efficient if you know the string doesn't contain any nested delimiters.

[prepended] & [appended] Patterns

[Pattern]s can be provided to [RecursiveRegex]'s [prepended] and [appended] parameters to disqualify any matched set of delimiters that aren't lead and/or followed by the provided [Pattern].

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']
inverseMatch

A [Pattern] can be provided to the [inverseMatch] parameter to define a pattern that should be matched, but only if it's not delimited.

Note: [global] has no affect on the matches if an [inverseMatch] pattern is provided, as all lower-level matches are delimited.

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']

Capture Groups

The block of text captured between the delimiters can be captured in a named group by providing [RecursiveRegex] with a [captureGroupName].

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 '

// Groups named within the delimiters can also be called.
print(regex.firstMatch(input).namedGroup('type')); // 'ELEMENT'

Kategorien

Abhängigkeiten

Abhängigkeiten 1 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.