Standardbibliothek
Antra::Regex
import Antra::RegexRegex operations for Antra.
Antra::Regex accepts either pattern strings or compiled regex values from
Regex.compile(...) / regex"...". The builtin regex?(value) checks
whether a runtime value is already a compiled regex.
Überblick#
Für reguläre Ausdrücke und Match-Helfer.
Die zentrale API ist:
import Antra::Regex as Regex
Regex.match("foo bar baz", "\\w+")
Regex.test("hello", "^hel")
Regex.replace("foo foo", "o+", "0") # nur erster Treffer
Regex.replace_all("a1b2", "\\d", "#")Regex.replace(...) ersetzt den ersten Treffer, Regex.replace_all(...) alle.
Auch wenn diese Funktionen historisch zusätzlich als globale Built-ins vorhanden sind, ist die Paketform für neue Doku und neuen Code die klarere Lesart.
Referenz#
import Antra::Regex as R
R.compile("^item-[0-9]+$")
R.compile("^item-[0-9]+$").!
R.match("abc123def456", "\\d+")
R.test("hello", "^hel")
R.replace("a1b2", "\\d", "#")
R.replace_all("a1b2", "\\d", "#")Antra::Regex ist die kleine Regex-Surface der Stdlib. Fuer feste Pattern
kannst du direkt String-Pattern oder regex"..."-Literale verwenden. Fuer
dynamische Pattern aus Config, Dateien oder User-Input ist R.compile(...)
meist die klarere Form.
Die wichtigsten Formen sind:
R.compile(pattern)liefert%Ok[rx]oder%Err[...]R.compile(pattern).!liefert direkt ein kompiliertes Regex oder wirftR.match(text, pattern)liefert die aktuelle Match-Liste als ArrayR.test(text, pattern)liefert nurtrueoderfalseR.replace(text, pattern, repl)ersetzt den ersten TrefferR.replace_all(text, pattern, repl)ersetzt alle Treffer
Alle diese Funktionen akzeptieren als pattern entweder einen Pattern-String
oder ein bereits kompiliertes Regex.
import Antra::Regex as R
val rx = R.compile("^item-[0-9]+$").!
println(R.test("item-42", rx))
println(R.replace("item-42 item-99", rx, "X"))
println(R.replace_all("item-42 item-99", rx, "X"))Fuer feste Pattern ist die Literalform oft die kuerzeste Lesart:
Fuer Regex-Muster ist der Backtick-String regex`...` am angenehmsten:
Backslashes bleiben literal, \d/\w muessen nicht doppelt escaped werden.
println("hello" =~ regex`^hel`)
if "2026-05-19" =~ regex`(?<year>\d{4})-(\d{2})-(\d{2})` {
println(year)
println(_1)
println(_2)
println(_3)
}
unless "world" =~ regex`(?<prefix>^wor)(ld)` {
println("fallback")
} else {
println(prefix)
println(_1)
println(_2)
}
match "2026-05-19" ~? regex`(?<year>\d{4})-(\d{2})-(\d{2})` {
%Some[parts] -> {
println(parts[0]) # ganzer Treffer -> "2026-05-19"
println(parts.year) # benannte Gruppe -> Keyword-Key
println(parts[2]) # unbenannte Gruppe -> Gruppennummer
println(parts[3])
}
%None[] -> println("kein Treffer")
}Wichtig fuer das aktuelle Verhalten:
R.match(...)liefert kein besonderes Match-Objekt, sondern ein normales Arraytext ~? rxliefert bei einem Treffer%Some[...], sonst%None[]. Die Form haengt vom Muster ab: ohne Capture-Gruppen ist es%Some[string](der getroffene Text); mit Gruppen%Some[map], wobei Key0der ganze Treffer ist, benannte Gruppen ((?<name>...)) unter ihrem Namen (map.name) und unbenannte unter ihrer Gruppennummer (map[2]) liegen. Anders als=~erzeugt~?keine Variablen-Bindungen, sondern gibt einen Wert zurueck.if text =~ rx { ... }bindet benannte und nummerierte Captures nur lokal im erfolgreichen Branchunless text =~ rx { ... } else { ... }bindet dieselben Captures lokal im ausgefuehrtenelse-Branch- nacktes
text =~ rxbleibt trotzdem ein normaler Bool-Ausdruck R.replace(...)undR.replace_all(...)geben immer neue Strings zurueck und mutieren nicht still
Funktionen#
fn compile(pattern :- String | Regex) :- Result[Regex, Any]Compiles pattern and returns %Ok[regex] or %Err[...].
fn match(str :- String, pattern :- String | Regex) :- [String]Returns the current match payload as an array.
Example:
Regex.match("2026-05-19", "(\\d{4})-(\\d{2})-(\\d{2})")
# => ["2026", "05", "19"]fn replace(str :- String, pattern :- String | Regex, repl :- String) :- StringReplaces the first match of pattern in str.
fn replace_all(str :- String, pattern :- String | Regex, repl :- String) :- StringReplaces all matches of pattern in str.
fn test(str :- String, pattern :- String | Regex) :- BoolReturns true if str matches pattern, otherwise false.
