[−][src]Struct regex_syntax::CharClass
A character class.
A character class has a canonical format that the parser guarantees. Its canonical format is defined by the following invariants:
- Given any Unicode scalar value, it is matched by at most one character range in a canonical character class.
- Every adjacent character range is separated by at least one Unicode scalar value.
- Given any pair of character ranges
r1
andr2
, ifr1.end < r2.start
, thenr1
comes beforer2
in a canonical character class.
In sum, any CharClass
produced by this crate's parser is a sorted
sequence of non-overlapping ranges. This makes it possible to test whether
a character is matched by a class with a binary search.
If the case insensitive flag was set when parsing a character class, then
simple case folding is done automatically. For example, (?i)[a-c]
is
automatically translated to [a-cA-C]
.
Methods
impl CharClass
[src]
pub fn new(ranges: Vec<ClassRange>) -> CharClass
[src]
Create a new class from an existing set of ranges.
pub fn matches(&self, c: char) -> bool
[src]
Returns true if c
is matched by this character class.
pub fn remove(&mut self, c: char)
[src]
Removes the given character from the class if it exists.
Note that this takes O(n)
time in the number of ranges.
pub fn negate(self) -> CharClass
[src]
Negates the character class.
For all c
where c
is a Unicode scalar value, c
matches self
if and only if c
does not match self.negate()
.
pub fn case_fold(self) -> CharClass
[src]
Apply case folding to this character class.
N.B. Applying case folding to a negated character class probably
won't produce the expected result. e.g., (?i)[^x]
really should
match any character sans x
and X
, but if [^x]
is negated
before being case folded, you'll end up matching any character.
Methods from Deref<Target = Vec<ClassRange>>
pub fn capacity(&self) -> usize
1.0.0[src]
Returns the number of elements the vector can hold without reallocating.
Examples
let vec: Vec<i32> = Vec::with_capacity(10); assert_eq!(vec.capacity(), 10);
pub fn as_slice(&self) -> &[T]
1.7.0[src]
Extracts a slice containing the entire vector.
Equivalent to &s[..]
.
Examples
use std::io::{self, Write}; let buffer = vec![1, 2, 3, 5, 8]; io::sink().write(buffer.as_slice()).unwrap();
pub fn as_ptr(&self) -> *const T
1.37.0[src]
Returns a raw pointer to the vector's buffer.
The caller must ensure that the vector outlives the pointer this function returns, or else it will end up pointing to garbage. Modifying the vector may cause its buffer to be reallocated, which would also make any pointers to it invalid.
The caller must also ensure that the memory the pointer (non-transitively) points to
is never written to (except inside an UnsafeCell
) using this pointer or any pointer
derived from it. If you need to mutate the contents of the slice, use as_mut_ptr
.
Examples
let x = vec![1, 2, 4]; let x_ptr = x.as_ptr(); unsafe { for i in 0..x.len() { assert_eq!(*x_ptr.add(i), 1 << i); } }
pub fn len(&self) -> usize
1.0.0[src]
Returns the number of elements in the vector, also referred to as its 'length'.
Examples
let a = vec![1, 2, 3]; assert_eq!(a.len(), 3);
pub fn is_empty(&self) -> bool
1.0.0[src]
Returns true
if the vector contains no elements.
Examples
let mut v = Vec::new(); assert!(v.is_empty()); v.push(1); assert!(!v.is_empty());
Trait Implementations
impl IntoIterator for CharClass
[src]
type Item = ClassRange
The type of the elements being iterated over.
type IntoIter = IntoIter<ClassRange>
Which kind of iterator are we turning this into?
fn into_iter(self) -> IntoIter<ClassRange>
[src]
impl<'a> IntoIterator for &'a CharClass
[src]
type Item = &'a ClassRange
The type of the elements being iterated over.
type IntoIter = Iter<'a, ClassRange>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Iter<'a, ClassRange>
[src]
impl Clone for CharClass
[src]
impl Eq for CharClass
[src]
impl PartialEq<CharClass> for CharClass
[src]
impl Display for CharClass
[src]
impl Debug for CharClass
[src]
impl Deref for CharClass
[src]
type Target = Vec<ClassRange>
The resulting type after dereferencing.
fn deref(&self) -> &Vec<ClassRange>
[src]
impl StructuralPartialEq for CharClass
[src]
impl StructuralEq for CharClass
[src]
Auto Trait Implementations
impl Send for CharClass
impl Sync for CharClass
impl Unpin for CharClass
impl UnwindSafe for CharClass
impl RefUnwindSafe for CharClass
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<I> IntoIterator for I where
I: Iterator,
[src]
I: Iterator,
type Item = <I as Iterator>::Item
The type of the elements being iterated over.
type IntoIter = I
Which kind of iterator are we turning this into?
fn into_iter(self) -> I
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,