File tree Expand file tree Collapse file tree 3 files changed +20
-0
lines changed
src/libraries/System.Text.RegularExpressions
src/System/Text/RegularExpressions Expand file tree Collapse file tree 3 files changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -51,10 +51,13 @@ internal sealed partial class RegexCharClass
51
51
52
52
internal const string SpaceClass = "\u0000 \u0000 \u0001 \u0064 " ; // \s
53
53
internal const string NotSpaceClass = "\u0000 \u0000 \u0001 \uFF9C " ; // \S
54
+ internal const string NegatedSpaceClass = "\u0001 \0 \u0001 d" ; // [^\s]
54
55
internal const string WordClass = "\u0000 \u0000 \u000A \u0000 \u0002 \u0004 \u0005 \u0003 \u0001 \u0006 \u0009 \u0013 \u0000 " ; // \w
55
56
internal const string NotWordClass = "\u0000 \u0000 \u000A \u0000 \uFFFE \uFFFC \uFFFB \uFFFD \uFFFF \uFFFA \uFFF7 \uFFED \u0000 " ; // \W
57
+ internal const string NegatedWordClass = "\u0001 \0 \n \0 \u0002 \u0004 \u0005 \u0003 \u0001 \u0006 \t \u0013 \0 " ; // [^\w]
56
58
internal const string DigitClass = "\u0000 \u0000 \u0001 \u0009 " ; // \d
57
59
internal const string NotDigitClass = "\u0000 \u0000 \u0001 \uFFF7 " ; // \D
60
+ internal const string NegatedDigitClass = "\u0001 \0 \u0001 \t " ; // [^\d]
58
61
internal const string ControlClass = "\0 \0 \u0001 \u000f " ; // \p{Cc}
59
62
internal const string NotControlClass = "\0 \0 \u0001 \ufff1 " ; // \P{Cc}
60
63
internal const string LetterClass = "\0 \0 \a \0 \u0002 \u0004 \u0005 \u0003 \u0001 \0 " ; // \p{L}
Original file line number Diff line number Diff line change @@ -981,6 +981,17 @@ private RegexNode ReduceSet()
981
981
case RegexCharClass . NotSpaceSpaceClass :
982
982
Str = RegexCharClass . AnyClass ;
983
983
break ;
984
+
985
+ // Different ways of saying \D, \S, \W
986
+ case RegexCharClass . NegatedDigitClass : // [^\d]
987
+ Str = RegexCharClass . NotDigitClass ;
988
+ break ;
989
+ case RegexCharClass . NegatedSpaceClass : // [^\s]
990
+ Str = RegexCharClass . NotSpaceClass ;
991
+ break ;
992
+ case RegexCharClass . NegatedWordClass : // [^\w]
993
+ Str = RegexCharClass . NotWordClass ;
994
+ break ;
984
995
}
985
996
986
997
return this ;
Original file line number Diff line number Diff line change @@ -9,6 +9,12 @@ namespace System.Text.RegularExpressions.Tests
9
9
public class RegexReductionTests
10
10
{
11
11
[ Theory ]
12
+ // Well-known sets
13
+ [ InlineData ( @"[^\d]" , @"\D" ) ]
14
+ [ InlineData ( @"[^\w]" , @"\W" ) ]
15
+ [ InlineData ( @"[^\s]" , @"\S" ) ]
16
+ [ InlineData ( @"[\s\S]" , @"[\d\D]" ) ]
17
+ [ InlineData ( @"[\s\S]" , @"[\w\W]" ) ]
12
18
// Two greedy one loops
13
19
[ InlineData ( "a*a*" , "a*" ) ]
14
20
[ InlineData ( "(a*a*)" , "(a*)" ) ]
You can’t perform that action at this time.
0 commit comments