regex: The first range in a character class can start with a left bracket
This commit is contained in:
parent
48daba088b
commit
f219773181
2 changed files with 8 additions and 5 deletions
|
@ -374,10 +374,6 @@ impl<'a> Parser<'a> {
|
|||
let mut ranges: Vec<(char, char)> = vec!();
|
||||
let mut alts: Vec<Ast> = vec!();
|
||||
|
||||
if self.peek_is(1, ']') {
|
||||
try!(self.expect(']'));
|
||||
ranges.push((']', ']'))
|
||||
}
|
||||
while self.peek_is(1, '-') {
|
||||
try!(self.expect('-'));
|
||||
ranges.push(('-', '-'))
|
||||
|
@ -411,7 +407,7 @@ impl<'a> Parser<'a> {
|
|||
ast => fail!("Unexpected AST item '{}'", ast),
|
||||
}
|
||||
}
|
||||
']' => {
|
||||
']' if ranges.len() > 0 || alts.len() > 0 => {
|
||||
if ranges.len() > 0 {
|
||||
let flags = negated | (self.flags & FLAG_NOCASE);
|
||||
let mut ast = AstClass(combine_ranges(ranges), flags);
|
||||
|
|
|
@ -53,6 +53,13 @@ fn quoted_bracket_set() {
|
|||
assert_eq!(ms, vec![(0, 1), (1, 2)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn first_range_starts_with_left_bracket() {
|
||||
let re = regex!(r"([[-z])");
|
||||
let ms = re.find_iter("[]").collect::<Vec<(uint, uint)>>();
|
||||
assert_eq!(ms, vec![(0, 1), (1, 2)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn range_ends_with_escape() {
|
||||
let re = regex!(r"([\[-\x{5d}])");
|
||||
|
|
Loading…
Reference in a new issue