Use case-sensitive regular expressions in --no-compress-regex

On some windows versions (plus wine) std::regex has issues with the
icase flag (making regex case insensitive). Put the responsibility of
the case sensitivity on the caller.

Fixes: 127793905
Test: wine aapt2_tests.exe -> Util_test
Change-Id: I6775514d3ef43c2c47465bf39ceaf2c195909724
diff --git a/tools/aapt2/cmd/Link.h b/tools/aapt2/cmd/Link.h
index 56bff8f..aea2432 100644
--- a/tools/aapt2/cmd/Link.h
+++ b/tools/aapt2/cmd/Link.h
@@ -264,8 +264,8 @@
         &options_.keep_raw_values);
     AddOptionalFlag("--no-compress-regex",
         "Do not compress extensions matching the regular expression. Remember to\n"
-            " use the '$' symbol for end of line. Uses a non case-sensitive\n"
-            " ECMAScript regular expression grammar.",
+            "use the '$' symbol for end of line. Uses a case-sensitive ECMAScript"
+            "regular expression grammar.",
         &no_compress_regex);
     AddOptionalSwitch("--warn-manifest-validation",
         "Treat manifest validation errors as warnings.",
diff --git a/tools/aapt2/cmd/Util.cpp b/tools/aapt2/cmd/Util.cpp
index e2c65ba7..7214f1a 100644
--- a/tools/aapt2/cmd/Util.cpp
+++ b/tools/aapt2/cmd/Util.cpp
@@ -436,9 +436,9 @@
 }
 
 std::regex GetRegularExpression(const std::string &input) {
-  // Standard ECMAScript grammar plus case insensitive.
+  // Standard ECMAScript grammar.
   std::regex case_insensitive(
-      input, std::regex_constants::icase | std::regex_constants::ECMAScript);
+      input, std::regex_constants::ECMAScript);
   return case_insensitive;
 }
 
diff --git a/tools/aapt2/cmd/Util_test.cpp b/tools/aapt2/cmd/Util_test.cpp
index 2f090bb..ac1f981 100644
--- a/tools/aapt2/cmd/Util_test.cpp
+++ b/tools/aapt2/cmd/Util_test.cpp
@@ -383,13 +383,32 @@
   EXPECT_NE(*adjusted_contraints[1].configs.begin(), ConfigDescription::DefaultConfig());
 }
 
-// TODO(127793905): Enable test
-/*TEST(UtilTest, RegularExperssions) {
+TEST (UtilTest, RegularExperssionsSimple) {
   std::string valid(".bc$");
   std::regex expression = GetRegularExpression(valid);
   EXPECT_TRUE(std::regex_search("file.abc", expression));
   EXPECT_TRUE(std::regex_search("file.123bc", expression));
   EXPECT_FALSE(std::regex_search("abc.zip", expression));
-}*/
+}
+
+TEST (UtilTest, RegularExpressionComplex) {
+  std::string valid("\\.(d|D)(e|E)(x|X)$");
+  std::regex expression = GetRegularExpression(valid);
+  EXPECT_TRUE(std::regex_search("file.dex", expression));
+  EXPECT_TRUE(std::regex_search("file.DEX", expression));
+  EXPECT_TRUE(std::regex_search("file.dEx", expression));
+  EXPECT_FALSE(std::regex_search("file.dexx", expression));
+  EXPECT_FALSE(std::regex_search("dex.file", expression));
+  EXPECT_FALSE(std::regex_search("file.adex", expression));
+}
+
+TEST (UtilTest, RegularExpressionNonEnglish) {
+  std::string valid("\\.(k|K)(o|O)(ń|Ń)(c|C)(ó|Ó)(w|W)(k|K)(a|A)$");
+  std::regex expression = GetRegularExpression(valid);
+  EXPECT_TRUE(std::regex_search("file.końcówka", expression));
+  EXPECT_TRUE(std::regex_search("file.KOŃCÓWKA", expression));
+  EXPECT_TRUE(std::regex_search("file.kOńcÓwkA", expression));
+  EXPECT_FALSE(std::regex_search("file.koncowka", expression));
+}
 
 }  // namespace aapt