Trait CharacterClass

Source
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§

Source

fn new_from_range_u32<R: RangeBounds<u32>>(range: R) -> Option<Self>

Source

fn new_from_range_char<R: RangeBounds<char>>(range: R) -> Self

Source

fn get_cardinality(&self) -> u32

Source

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>

Source§

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

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

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

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());

Implementors§