Trait regex::bytes::Replacer
pub trait Replacer {
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
);
fn no_expansion<'r>(&'r mut Self) -> Option<Cow<'r, [u8]>> { ... }
fn by_ref<'r>(&'r mut Self) -> ReplacerRef<'r, Self> { ... }
}
Documentation
Replacer describes types that can be used to replace matches in a byte string.
In general, users of this crate shouldn’t need to implement this trait,
since implementations are already provided for &[u8]
along with other
variants of bytes types and FnMut(&Captures) -> Vec<u8>
(or any
FnMut(&Captures) -> T
where T: AsRef<[u8]>
), which covers most use cases.
Required Methods
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
Appends text to dst
to replace the current match.
The current match is represented by caps
, which is guaranteed to
have a match at capture group 0
.
For example, a no-op replacement would be
dst.extend(&caps[0])
.
Provided Methods
fn by_ref<'r>(&'r mut Self) -> ReplacerRef<'r, Self>
Return a Replacer
that borrows and wraps this Replacer
.
This is useful when you want to take a generic Replacer
(which might
not be cloneable) and use it without consuming it, so it can be used
more than once.
Example
use regex::bytes::{Regex, Replacer};
fn replace_all_twice<R: Replacer>(
re: Regex,
src: &[u8],
mut rep: R,
) -> Vec<u8> {
let dst = re.replace_all(src, rep.by_ref());
let dst = re.replace_all(&dst, rep.by_ref());
dst.into_owned()
}
fn no_expansion<'r>(&'r mut Self) -> Option<Cow<'r, [u8]>>
Return a fixed unchanging replacement byte string.
When doing replacements, if access to Captures
is not needed (e.g.,
the replacement byte string does not need $
expansion), then it can
be beneficial to avoid finding sub-captures.
In general, this is called once for every call to replacen
.
Implementations on Foreign Types
impl<'a> Replacer for &'a Cow<'a, [u8]>
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion(&mut Self) -> Option<Cow<'_, [u8]>>
impl<'a> Replacer for &'a Vec<u8>
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion(&mut Self) -> Option<Cow<'_, [u8]>>
impl<'a> Replacer for &'a [u8]
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion(&mut Self) -> Option<Cow<'_, [u8]>>
impl<'a> Replacer for Cow<'a, [u8]>
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion(&mut Self) -> Option<Cow<'_, [u8]>>
impl Replacer for Vec<u8>
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion(&mut Self) -> Option<Cow<'_, [u8]>>
Implementors
impl<'t> Replacer for NoExpand<'t>
fn replace_append(
&mut Self,
_: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion(&mut Self) -> Option<Cow<'_, [u8]>>
impl<'a, R: Replacer + ?Sized + 'a> Replacer for ReplacerRef<'a, R>
fn replace_append(
&mut Self,
caps: &Captures<'_>,
dst: &mut Vec<u8>
)
fn no_expansion<'r>(&'r mut Self) -> Option<Cow<'r, [u8]>>