`[abc]`,
`[^1234]`,
`[^\n]`,
+ `\!\\`,
}
type stringError struct {
// fixed bugs
tester{`ab$`, "cab", vec{1, 3}},
tester{`axxb$`, "axxcb", vec{}},
+
+ // can backslash-escape any punctuation
+ tester{`\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\{\|\}\~`,
+ `!"#$%&'()*+,-./:;<=>?@[\]^_{|}~`, vec{0, 31}},
+ tester{`[\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\{\|\}\~]+`,
+ `!"#$%&'()*+,-./:;<=>?@[\]^_{|}~`, vec{0, 31}},
+ tester{"\\`", "`", vec{0, 1}},
+ tester{"[\\`]+", "`", vec{0, 1}},
}
func compileTest(t *testing.T, expr string, error os.Error) *Regexp {
return false
}
-func specialcclass(c int) bool {
- for _, r := range `\-[]` {
+func ispunct(c int) bool {
+ for _, r := range "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" {
if c == r {
return true
}
p.error(ErrExtraneousBackslash)
case c == 'n':
c = '\n'
- case specialcclass(c):
+ case ispunct(c):
// c is as delivered
default:
p.error(ErrBadBackslash)
p.error(ErrExtraneousBackslash)
case c == 'n':
c = '\n'
- case special(c):
+ case ispunct(c):
// c is as delivered
default:
p.error(ErrBadBackslash)