diff --git a/src/test/cpp/rc_options_test.cc b/src/test/cpp/rc_options_test.cc
index 58251af..41684a5 100644
--- a/src/test/cpp/rc_options_test.cc
+++ b/src/test/cpp/rc_options_test.cc
@@ -22,12 +22,14 @@
 #include "src/main/cpp/util/path.h"
 #include "src/main/cpp/util/strings.h"
 #include "src/main/cpp/workspace_layout.h"
+#include "googlemock/include/gmock/gmock.h"
 #include "googletest/include/gtest/gtest.h"
 
 namespace blaze {
 using std::string;
 using std::unordered_map;
 using std::vector;
+using ::testing::MatchesRegex;
 
 class RcOptionsTest : public ::testing::Test {
  protected:
@@ -328,13 +330,12 @@
   std::unique_ptr<RcFile> rc =
       Parse("import_cycle_1.bazelrc", &error, &error_text);
   EXPECT_EQ(error, RcFile::ParseError::IMPORT_LOOP);
-  string expected_error;
-  blaze_util::StringPrintf(
-      &expected_error, "Import loop detected:\n  %s\n  %s\n  %s\n",
-      blaze_util::JoinPath(test_file_dir_, "import_cycle_1.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "import_cycle_2.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "import_cycle_1.bazelrc").c_str());
-  ASSERT_EQ(error_text, expected_error);
+  ASSERT_THAT(
+      error_text,
+      MatchesRegex("Import loop detected:\n"
+                   "  .*import_cycle_1.bazelrc\n"
+                   "  .*import_cycle_2.bazelrc\n"
+                   "  .*import_cycle_1.bazelrc\n"));
 }
 
 TEST_F(RcOptionsTest, LongImportCycleFails) {
@@ -356,18 +357,16 @@
   std::unique_ptr<RcFile> rc =
       Parse("chain_to_cycle_1.bazelrc", &error, &error_text);
   EXPECT_EQ(error, RcFile::ParseError::IMPORT_LOOP);
-  string expected_error;
-  blaze_util::StringPrintf(
-      &expected_error,
-      "Import loop detected:\n  %s\n  %s\n  %s\n  %s\n  %s\n  %s\n  %s\n",
-      blaze_util::JoinPath(test_file_dir_, "chain_to_cycle_1.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "chain_to_cycle_2.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "chain_to_cycle_3.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "chain_to_cycle_4.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "import_cycle_1.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "import_cycle_2.bazelrc").c_str(),
-      blaze_util::JoinPath(test_file_dir_, "import_cycle_1.bazelrc").c_str());
-  ASSERT_EQ(error_text, expected_error);
+  ASSERT_THAT(
+      error_text,
+      MatchesRegex("Import loop detected:\n"
+                   "  .*chain_to_cycle_1.bazelrc\n"
+                   "  .*chain_to_cycle_2.bazelrc\n"
+                   "  .*chain_to_cycle_3.bazelrc\n"
+                   "  .*chain_to_cycle_4.bazelrc\n"
+                   "  .*import_cycle_1.bazelrc\n"
+                   "  .*import_cycle_2.bazelrc\n"
+                   "  .*import_cycle_1.bazelrc\n"));
 }
 
 TEST_F(RcOptionsTest, FileDoesNotExist) {
@@ -375,11 +374,10 @@
   string error_text;
   std::unique_ptr<RcFile> rc = Parse("not_a_file.bazelrc", &error, &error_text);
   EXPECT_EQ(error, RcFile::ParseError::UNREADABLE_FILE);
-  string expected_error;
-  blaze_util::StringPrintf(
-      &expected_error, "Unexpected error reading .blazerc file '%s'",
-      blaze_util::JoinPath(test_file_dir_, "not_a_file.bazelrc").c_str());
-  ASSERT_EQ(error_text, expected_error);
+  ASSERT_THAT(
+      error_text,
+      MatchesRegex(
+          "Unexpected error reading .blazerc file '.*not_a_file.bazelrc'"));
 }
 
 TEST_F(RcOptionsTest, ImportedFileDoesNotExist) {
@@ -402,14 +400,11 @@
   string error_text;
   std::unique_ptr<RcFile> rc = Parse("bad_import.bazelrc", &error, &error_text);
   EXPECT_EQ(error, RcFile::ParseError::INVALID_FORMAT);
-
-  string expected_error;
-  blaze_util::StringPrintf(
-      &expected_error,
-      "Invalid import declaration in .blazerc file '%s': "
-      "'import somefile bar' (are you in your source checkout/WORKSPACE?)",
-      blaze_util::JoinPath(test_file_dir_, "bad_import.bazelrc").c_str());
-  ASSERT_EQ(error_text, expected_error);
+  ASSERT_THAT(
+      error_text,
+      MatchesRegex("Invalid import declaration in .blazerc file "
+                   "'.*bad_import.bazelrc': 'import somefile bar' \\(are you "
+                   "in your source checkout/WORKSPACE\\?\\)"));
 }
 
 // TODO(b/34811299) The tests below identify ways that '\' used as a line
