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(('-', '-'))
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);
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}])");