diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index bb52441923599c3508f21ae5d619a3de6ed8e25b..ed83069679c00b47de97cc851e076619bc06e264 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -2135,37 +2135,33 @@ bool cmSystemTools::GuessLibraryInstallName(std::string const& fullPath,
 std::string::size_type cmSystemToolsFindRPath(std::string const& have,
                                               std::string const& want)
 {
-  // Search for the desired rpath.
-  std::string::size_type pos = have.find(want);
-
-  // If the path is not present we are done.
-  if (pos == std::string::npos) {
-    return pos;
-  }
+  std::string::size_type pos = 0;
+  while (pos < have.size()) {
+    // Look for an occurrence of the string.
+    std::string::size_type const beg = have.find(want, pos);
+    if (beg == std::string::npos) {
+      return std::string::npos;
+    }
 
-  // Build a regex to match a properly separated path instance.
-  std::string regex_str = "(^|:)(";
-  for (std::string::const_iterator i = want.begin(); i != want.end(); ++i) {
-    int ch = *i;
-    if (!(('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') ||
-          ('0' <= ch && ch <= '9'))) {
-      // Escape the non-alphanumeric character.
-      regex_str += "\\";
+    // Make sure it is separated from preceding entries.
+    if (beg > 0 && have[beg - 1] != ':') {
+      pos = beg + 1;
+      continue;
     }
-    // Store the character.
-    regex_str.append(1, static_cast<char>(ch));
-  }
-  regex_str += ")(:|$)";
 
-  // Look for the separated path.
-  cmsys::RegularExpression regex(regex_str.c_str());
-  if (regex.find(have)) {
+    // Make sure it is separated from following entries.
+    std::string::size_type const end = beg + want.size();
+    if (end < have.size() && have[end] != ':') {
+      pos = beg + 1;
+      continue;
+     }
+
     // Return the position of the path portion.
-    return regex.start(2);
-  } else {
-    // The desired rpath was not found.
-    return std::string::npos;
+    return beg;
   }
+
+  // The desired rpath was not found.
+  return std::string::npos;
 }
 #endif