@@ -1427,7 +1427,7 @@ func (p *parser) scanCapname() string {
14271427 return string (p .pattern [startpos :p .textpos ()])
14281428}
14291429
1430- //Scans contents of [] (not including []'s), and converts to a set.
1430+ // Scans contents of [] (not including []'s), and converts to a set.
14311431func (p * parser ) scanCharSet (caseInsensitive , scanOnly bool ) (* CharSet , error ) {
14321432 ch := '\x00'
14331433 chPrev := '\x00'
@@ -1467,7 +1467,11 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
14671467 case 'D' , 'd' :
14681468 if ! scanOnly {
14691469 if inRange {
1470- return nil , p .getErr (ErrBadClassInCharRange , ch )
1470+ if ! p .useOptionE () {
1471+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1472+ }
1473+ cc .addChar ('-' )
1474+ cc .addChar (chPrev )
14711475 }
14721476 cc .addDigit (p .useOptionE () || p .useRE2 (), ch == 'D' , p .patternRaw )
14731477 }
@@ -1476,7 +1480,11 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
14761480 case 'S' , 's' :
14771481 if ! scanOnly {
14781482 if inRange {
1479- return nil , p .getErr (ErrBadClassInCharRange , ch )
1483+ if ! p .useOptionE () {
1484+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1485+ }
1486+ cc .addChar ('-' )
1487+ cc .addChar (chPrev )
14801488 }
14811489 cc .addSpace (p .useOptionE (), p .useRE2 (), ch == 'S' )
14821490 }
@@ -1485,7 +1493,11 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
14851493 case 'W' , 'w' :
14861494 if ! scanOnly {
14871495 if inRange {
1488- return nil , p .getErr (ErrBadClassInCharRange , ch )
1496+ if ! p .useOptionE () {
1497+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1498+ }
1499+ cc .addChar ('-' )
1500+ cc .addChar (chPrev )
14891501 }
14901502
14911503 cc .addWord (p .useOptionE () || p .useRE2 (), ch == 'W' )
@@ -1495,22 +1507,29 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) {
14951507 case 'p' , 'P' :
14961508 if ! scanOnly {
14971509 if inRange {
1498- return nil , p .getErr (ErrBadClassInCharRange , ch )
1510+ if ! p .useOptionE () {
1511+ return nil , p .getErr (ErrBadClassInCharRange , ch )
1512+ }
1513+ cc .addChar ('-' )
1514+ cc .addChar (chPrev )
14991515 }
15001516 prop , err := p .parseProperty ()
15011517 if err != nil {
15021518 return nil , err
15031519 }
15041520 cc .addCategory (prop , (ch != 'p' ), caseInsensitive , p .patternRaw )
15051521 } else {
1506- p .parseProperty ()
1522+ _ , err := p .parseProperty ()
1523+ if err != nil {
1524+ return nil , err
1525+ }
15071526 }
15081527
15091528 continue
15101529
15111530 case '-' :
15121531 if ! scanOnly {
1513- cc .addRange ( ch , ch )
1532+ cc .addChar ( ch )
15141533 }
15151534 continue
15161535
0 commit comments