An empty regex is a valid regex that always matches. This behavior
is consistent with at least Go and Python.

A couple regression tests are included.
This commit is contained in:
Andrew Gallant 2014-06-03 23:04:59 -04:00
parent f5ead0dd66
commit 9d39178f2f
2 changed files with 17 additions and 0 deletions

View File

@ -201,6 +201,9 @@ pub fn parse(s: &str) -> Result<Ast, Error> {
impl<'a> Parser<'a> {
fn parse(&mut self) -> Result<Ast, Error> {
if self.chars.len() == 0 {
return Ok(Nothing);
}
loop {
let c = self.cur();
match c {

View File

@ -28,6 +28,20 @@ fn split() {
assert_eq!(subs, vec!("cauchy", "plato", "tyler", "binx"));
}
#[test]
fn empty_regex_empty_match() {
let re = regex!("");
let ms = re.find_iter("").collect::<Vec<(uint, uint)>>();
assert_eq!(ms, vec![(0, 0)]);
}
#[test]
fn empty_regex_nonempty_match() {
let re = regex!("");
let ms = re.find_iter("abc").collect::<Vec<(uint, uint)>>();
assert_eq!(ms, vec![(0, 0), (1, 1), (2, 2), (3, 3)]);
}
macro_rules! replace(
($name:ident, $which:ident, $re:expr,
$search:expr, $replace:expr, $result:expr) => (