Development · Evolving reference
Replace
Creates an owning UTF-8 string with ordinal nonoverlapping replacements.
Sn is under heavy development. This reference includes the intended 1.0 design; features may be incomplete in the current compiler. Read the status →
Module std.text
import std.text;Public declaration contracts and authored examples. A page can document several related symbols. Implementation bodies are excluded.
fn
pub const fn TryReplace(Text: str, Search: str, Replacement: str) -> Result<String, AllocationError>Creates an owning UTF-8 string with ordinal nonoverlapping replacements. Text: Valid UTF-8 input, borrowed only for this operation. Search: Valid UTF-8 pattern; empty inserts at every scalar boundary. Replacement: Valid UTF-8 bytes copied for each admitted match. Return: Owning String, or recoverable AllocationError with no partial result. Note: Uses the ordinal Find search cost; never rescans inserted replacement bytes.
Example
module example.text_replacement;
from std.text import TryReplace;
// Transient owning strings stay inside the constant frame; only its scalar result escapes.
const fn VerifyConstantReplacement() -> i32 {
switch TryReplace("λ/path/path", "path", "leaf") {
case .Ok { Value = Changed } => {
if Changed.View != "λ/leaf/leaf" { return 1; }
}
case .Err { Error = _ } => return 2;
}
switch TryReplace("λA", "", "-") {
case .Ok { Value = Changed } => {
if Changed.View != "-λ-A-" { return 3; }
}
case .Err { Error = _ } => return 4;
}
switch TryReplace("aaa", "aa", "X") {
case .Ok { Value = Changed } => {
if Changed.View != "Xa" { return 5; }
}
case .Err { Error = _ } => return 6;
}
return 0;
}
const ConstantStatus: i32 = VerifyConstantReplacement();
// Runtime parameters keep this dual-stage call on its ordinary runtime path.
fn VerifyRuntimeReplacement(Text: str, Search: str, Replacement: str, Expected: str) -> bool {
switch TryReplace(Text, Search, Replacement) {
case .Ok { Value = Changed } => return Changed.View == Expected;
case .Err { Error = _ } => return false;
}
}
fn Main() -> i32 {
if ConstantStatus != 0 { return ConstantStatus; }
if !VerifyRuntimeReplacement("λ/path/path", "path", "leaf", "λ/leaf/leaf") { return 7; }
if !VerifyRuntimeReplacement("λA", "", "-", "-λ-A-") { return 8; }
if !VerifyRuntimeReplacement("aaa", "aa", "X", "Xa") { return 9; }
return 0;
}Documentation snapshot: October 24, 2026 About versions ↗