Skip to content

Commit f219773

Browse files
committed
regex: The first range in a character class can start with a left bracket
1 parent 48daba0 commit f219773

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

src/libregex/parse.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,6 @@ impl<'a> Parser<'a> {
374374
let mut ranges: Vec<(char, char)> = vec!();
375375
let mut alts: Vec<Ast> = vec!();
376376

377-
if self.peek_is(1, ']') {
378-
try!(self.expect(']'));
379-
ranges.push((']', ']'))
380-
}
381377
while self.peek_is(1, '-') {
382378
try!(self.expect('-'));
383379
ranges.push(('-', '-'))
@@ -411,7 +407,7 @@ impl<'a> Parser<'a> {
411407
ast => fail!("Unexpected AST item '{}'", ast),
412408
}
413409
}
414-
']' => {
410+
']' if ranges.len() > 0 || alts.len() > 0 => {
415411
if ranges.len() > 0 {
416412
let flags = negated | (self.flags & FLAG_NOCASE);
417413
let mut ast = AstClass(combine_ranges(ranges), flags);

src/libregex/test/tests.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ fn quoted_bracket_set() {
5353
assert_eq!(ms, vec![(0, 1), (1, 2)]);
5454
}
5555

56+
#[test]
57+
fn first_range_starts_with_left_bracket() {
58+
let re = regex!(r"([[-z])");
59+
let ms = re.find_iter("[]").collect::<Vec<(uint, uint)>>();
60+
assert_eq!(ms, vec![(0, 1), (1, 2)]);
61+
}
62+
5663
#[test]
5764
fn range_ends_with_escape() {
5865
let re = regex!(r"([\[-\x{5d}])");

0 commit comments

Comments
 (0)