I tried to print out some information of the characters in C#.
The first example gives the output I expected.
public static void TestWorksAsExpected()
{
var i = 0;
for (var c = char.MinValue; i <= char.MaxValue; i++, c++)
{
if (Regex.IsMatch(c.ToString(), "[a-zA-Z]"))
{
Console.WriteLine($"index: {i} char: {c} ==> int:{(int) c} ==> hex:{(int) c:x}");
}
}
}
The expected output is:
index: 65 char: A ==> int:65 ==> hex:41
index: 66 char: B ==> int:66 ==> hex:42
index: 67 char: C ==> int:67 ==> hex:43
index: 68 char: D ==> int:68 ==> hex:44
index: 69 char: E ==> int:69 ==> hex:45
index: 70 char: F ==> int:70 ==> hex:46
index: 71 char: G ==> int:71 ==> hex:47
index: 72 char: H ==> int:72 ==> hex:48
index: 73 char: I ==> int:73 ==> hex:49
index: 74 char: J ==> int:74 ==> hex:4a
index: 75 char: K ==> int:75 ==> hex:4b
index: 76 char: L ==> int:76 ==> hex:4c
index: 77 char: M ==> int:77 ==> hex:4d
index: 78 char: N ==> int:78 ==> hex:4e
index: 79 char: O ==> int:79 ==> hex:4f
index: 80 char: P ==> int:80 ==> hex:50
index: 81 char: Q ==> int:81 ==> hex:51
index: 82 char: R ==> int:82 ==> hex:52
index: 83 char: S ==> int:83 ==> hex:53
index: 84 char: T ==> int:84 ==> hex:54
index: 85 char: U ==> int:85 ==> hex:55
index: 86 char: V ==> int:86 ==> hex:56
index: 87 char: W ==> int:87 ==> hex:57
index: 88 char: X ==> int:88 ==> hex:58
index: 89 char: Y ==> int:89 ==> hex:59
index: 90 char: Z ==> int:90 ==> hex:5a
index: 97 char: a ==> int:97 ==> hex:61
index: 98 char: b ==> int:98 ==> hex:62
index: 99 char: c ==> int:99 ==> hex:63
index: 100 char: d ==> int:100 ==> hex:64
index: 101 char: e ==> int:101 ==> hex:65
index: 102 char: f ==> int:102 ==> hex:66
index: 103 char: g ==> int:103 ==> hex:67
index: 104 char: h ==> int:104 ==> hex:68
index: 105 char: i ==> int:105 ==> hex:69
index: 106 char: j ==> int:106 ==> hex:6a
index: 107 char: k ==> int:107 ==> hex:6b
index: 108 char: l ==> int:108 ==> hex:6c
index: 109 char: m ==> int:109 ==> hex:6d
index: 110 char: n ==> int:110 ==> hex:6e
index: 111 char: o ==> int:111 ==> hex:6f
index: 112 char: p ==> int:112 ==> hex:70
index: 113 char: q ==> int:113 ==> hex:71
index: 114 char: r ==> int:114 ==> hex:72
index: 115 char: s ==> int:115 ==> hex:73
index: 116 char: t ==> int:116 ==> hex:74
index: 117 char: u ==> int:117 ==> hex:75
index: 118 char: v ==> int:118 ==> hex:76
index: 119 char: w ==> int:119 ==> hex:77
index: 120 char: x ==> int:120 ==> hex:78
index: 121 char: y ==> int:121 ==> hex:79
index: 122 char: z ==> int:122 ==> hex:7a
Now to the part I don't understand: If I use RegexOptions.IgnoreCase then it puts out two aditional lines, and I just dont get why.
public static void DoesNotWorkAsExpected()
{
var i = 0;
for (var c = char.MinValue; i <= char.MaxValue; i++, c++)
{
if (Regex.IsMatch(c.ToString(), "[a-zA-Z]", RegexOptions.IgnoreCase))
{
Console.WriteLine($"index: {i} char: {c} ==> int:{(int) c} ==> hex:{(int) c:x}");
}
}
}
The unexpected output:
index: 65 char: A ==> int:65 ==> hex:41
index: 66 char: B ==> int:66 ==> hex:42
index: 67 char: C ==> int:67 ==> hex:43
index: 68 char: D ==> int:68 ==> hex:44
index: 69 char: E ==> int:69 ==> hex:45
index: 70 char: F ==> int:70 ==> hex:46
index: 71 char: G ==> int:71 ==> hex:47
index: 72 char: H ==> int:72 ==> hex:48
index: 73 char: I ==> int:73 ==> hex:49
index: 74 char: J ==> int:74 ==> hex:4a
index: 75 char: K ==> int:75 ==> hex:4b
index: 76 char: L ==> int:76 ==> hex:4c
index: 77 char: M ==> int:77 ==> hex:4d
index: 78 char: N ==> int:78 ==> hex:4e
index: 79 char: O ==> int:79 ==> hex:4f
index: 80 char: P ==> int:80 ==> hex:50
index: 81 char: Q ==> int:81 ==> hex:51
index: 82 char: R ==> int:82 ==> hex:52
index: 83 char: S ==> int:83 ==> hex:53
index: 84 char: T ==> int:84 ==> hex:54
index: 85 char: U ==> int:85 ==> hex:55
index: 86 char: V ==> int:86 ==> hex:56
index: 87 char: W ==> int:87 ==> hex:57
index: 88 char: X ==> int:88 ==> hex:58
index: 89 char: Y ==> int:89 ==> hex:59
index: 90 char: Z ==> int:90 ==> hex:5a
index: 97 char: a ==> int:97 ==> hex:61
index: 98 char: b ==> int:98 ==> hex:62
index: 99 char: c ==> int:99 ==> hex:63
index: 100 char: d ==> int:100 ==> hex:64
index: 101 char: e ==> int:101 ==> hex:65
index: 102 char: f ==> int:102 ==> hex:66
index: 103 char: g ==> int:103 ==> hex:67
index: 104 char: h ==> int:104 ==> hex:68
index: 105 char: i ==> int:105 ==> hex:69
index: 106 char: j ==> int:106 ==> hex:6a
index: 107 char: k ==> int:107 ==> hex:6b
index: 108 char: l ==> int:108 ==> hex:6c
index: 109 char: m ==> int:109 ==> hex:6d
index: 110 char: n ==> int:110 ==> hex:6e
index: 111 char: o ==> int:111 ==> hex:6f
index: 112 char: p ==> int:112 ==> hex:70
index: 113 char: q ==> int:113 ==> hex:71
index: 114 char: r ==> int:114 ==> hex:72
index: 115 char: s ==> int:115 ==> hex:73
index: 116 char: t ==> int:116 ==> hex:74
index: 117 char: u ==> int:117 ==> hex:75
index: 118 char: v ==> int:118 ==> hex:76
index: 119 char: w ==> int:119 ==> hex:77
index: 120 char: x ==> int:120 ==> hex:78
index: 121 char: y ==> int:121 ==> hex:79
index: 122 char: z ==> int:122 ==> hex:7a
index: 304 char: I ==> int:304 ==> hex:130
index: 8490 char: K ==> int:8490 ==> hex:212a
In my understanding there shouldn't be a difference in the output. Why does the second code print out these two aditional lines?
index: 304 char: I ==> int:304 ==> hex:130
index: 8490 char: K ==> int:8490 ==> hex:212a