pub trait CharacterClass: Sized {
// Required methods
fn new_from_range_u32<R: RangeBounds<u32>>(range: R) -> Option<Self>;
fn new_from_range_char<R: RangeBounds<char>>(range: R) -> Self;
fn get_cardinality(&self) -> u32;
fn to_regex(&self) -> String;
}
Expand description
A trait for RangeSet<Char>
to hold ranges of char
.
§Example:
use regex_charclass::{irange::{RangeSet, range::AnyRange}, char::Char, CharacterClass};
let range1 = RangeSet::new_from_range_char('a'..='z');
assert_eq!(26, range1.get_cardinality());
assert_eq!("[a-z]", range1.to_regex());
let range2 = RangeSet::new_from_ranges(&[
AnyRange::from(Char::new('0')..=Char::new('9')),
AnyRange::from(Char::new('A')..=Char::new('F')),
AnyRange::from(Char::new('a')..=Char::new('f')),
]);
assert_eq!("\\p{ASCII_Hex_Digit}", range2.to_regex());
let range2_complement = range2.complement();
assert_eq!("\\P{ASCII_Hex_Digit}", range2_complement.to_regex());
assert_eq!(".", range2.union(&range2_complement).to_regex());
assert_eq!("[]", range2.intersection(&range2_complement).to_regex());
assert_eq!("[g-z]", range1.difference(&range2).to_regex());
Required Methods§
fn new_from_range_u32<R: RangeBounds<u32>>(range: R) -> Option<Self>
fn new_from_range_char<R: RangeBounds<char>>(range: R) -> Self
fn get_cardinality(&self) -> u32
fn to_regex(&self) -> String
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl CharacterClass for RangeSet<Char>
impl CharacterClass for RangeSet<Char>
Source§fn new_from_range_u32<R: RangeBounds<u32>>(range: R) -> Option<Self>
fn new_from_range_u32<R: RangeBounds<u32>>(range: R) -> Option<Self>
Create a new instance from the given range of u32
, return None
if the char
codes are invalid.
§Example:
use regex_charclass::{irange::RangeSet, CharacterClass};
let range = RangeSet::new_from_range_u32(97..=122);
Source§fn new_from_range_char<R: RangeBounds<char>>(range: R) -> Self
fn new_from_range_char<R: RangeBounds<char>>(range: R) -> Self
Create a new instance from the given range of char
.
§Example:
use regex_charclass::{irange::RangeSet, CharacterClass};
let range = RangeSet::new_from_range_char('a'..='z');
Source§fn get_cardinality(&self) -> u32
fn get_cardinality(&self) -> u32
Return the number of possible char
contained.
§Example:
use regex_charclass::{char::Char, irange::RangeSet, CharacterClass};
let range = RangeSet::new_from_range_char('a'..='z');
assert_eq!(26, range.get_cardinality());
Source§fn to_regex(&self) -> String
fn to_regex(&self) -> String
Return a valid regular expression character class.
§Example:
use regex_charclass::{irange::{RangeSet, range::AnyRange}, char::Char, CharacterClass};
let range = RangeSet::new_from_range_char('a'..='z');
assert_eq!("[a-z]", range.to_regex());
let range = RangeSet::<Char>::new_from_ranges(&[
AnyRange::from(Char::new('0')..=Char::new('9')),
AnyRange::from(Char::new('A')..=Char::new('F')),
AnyRange::from(Char::new('a')..=Char::new('f')),
]);
assert_eq!("\\p{ASCII_Hex_Digit}", range.to_regex());