SUMMARY
Replace uses of the local MIUtilParse::CRegexParser class with the LLVM support class llvm::Regex. This reduces duplication of code, and makes it possible to remove the MIUtilParse::CRegexParser class that requires LLVM internal implementation headers.

Bug: https://llvm.org/bugs/show_bug.cgi?id=29138

From:
https://reviews.llvm.org/file/data/ne2lqkdbc54c2ismicnp/PHID-FILE-nxy5llvyrv2t6fgjeqef/D23882.diff
Index: tools/lldb-mi/MICmdCmdData.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdData.cpp
+++ tools/lldb-mi/MICmdCmdData.cpp
@@ -25,6 +25,9 @@
 #include "lldb/API/SBInstruction.h"
 #include "lldb/API/SBInstructionList.h"
 #include "lldb/API/SBStream.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Regex.h"
 
 // In-house headers:
 #include "MICmdCmdData.h"
@@ -42,7 +45,6 @@
 #include "MICmdArgValConsume.h"
 #include "MICmnLLDBDebugSessionInfoVarObj.h"
 #include "MICmnLLDBUtilSBValue.h"
-#include "MIUtilParse.h"
 
 //++ ------------------------------------------------------------------------------------
 // Details: CMICmdCmdDataEvaluateExpression constructor.
@@ -1651,24 +1653,24 @@
     // is remains is assumed to be the filename.
 
     // Match LineEntry using regex.
-    static MIUtilParse::CRegexParser g_lineentry_nocol_regex( 
-        "^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$");
-    static MIUtilParse::CRegexParser g_lineentry_col_regex( 
-        "^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$");
-        //                ^1=start         ^2=end               ^3=f ^4=line ^5=:col(opt)
+    static llvm::Regex g_lineentry_nocol_regex(
+        llvm::StringRef("^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$"));
+    static llvm::Regex g_lineentry_col_regex(
+        llvm::StringRef("^ *LineEntry: \\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$"));
+        //                                ^1=start         ^2=end               ^3=f ^4=line ^5=:col(opt)
 
-    MIUtilParse::CRegexParser::Match match(6);
+    llvm::SmallVector<llvm::StringRef, 6> match;
 
     // First try matching the LineEntry with the column,
     // then try without the column.
-    const bool ok = g_lineentry_col_regex.Execute(input, match) ||
-                    g_lineentry_nocol_regex.Execute(input, match);
+    const bool ok = g_lineentry_col_regex.match(input, &match) ||
+                    g_lineentry_nocol_regex.match(input, &match);
     if (ok)
     {
-        start = match.GetMatchAtIndex(1);
-        end   = match.GetMatchAtIndex(2);
-        file  = match.GetMatchAtIndex(3);
-        line  = match.GetMatchAtIndex(4);
+        start = match[1];
+        end   = match[2];
+        file  = match[3];
+        line  = match[4];
     }
     return ok;
 }
Index: tools/lldb-mi/MICmdCmdSymbol.cpp
===================================================================
--- tools/lldb-mi/MICmdCmdSymbol.cpp
+++ tools/lldb-mi/MICmdCmdSymbol.cpp
@@ -11,15 +11,17 @@
 
 // Third Party Headers:
 #include "lldb/API/SBCommandInterpreter.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Regex.h"
 
 // In-house headers:
 #include "MICmdArgValFile.h"
 #include "MICmdCmdSymbol.h"
 #include "MICmnLLDBDebugSessionInfo.h"
 #include "MICmnMIResultRecord.h"
 #include "MICmnMIValueList.h"
 #include "MICmnMIValueTuple.h"
-#include "MIUtilParse.h"
 
 //++ ------------------------------------------------------------------------------------
 // Details: CMICmdCmdSymbolListLines constructor.
@@ -105,15 +107,15 @@
 ParseLLDBLineAddressHeader(const char *input, CMIUtilString &file)
 {
     // Match LineEntry using regex.
-    static MIUtilParse::CRegexParser g_lineentry_header_regex( 
-        "^ *Lines found for file (.+) in compilation unit (.+) in `(.+)$");
-        //                       ^1=file                  ^2=cu    ^3=module
+    static llvm::Regex g_lineentry_header_regex(
+        llvm::StringRef("^ *Lines found for file (.+) in compilation unit (.+) in `(.+)$"));
+        //                                       ^1=file                  ^2=cu    ^3=module
 
-    MIUtilParse::CRegexParser::Match match(4);
+    llvm::SmallVector<llvm::StringRef, 4> match;
 
-    const bool ok = g_lineentry_header_regex.Execute(input, match);
+    const bool ok = g_lineentry_header_regex.match(input, &match);
     if (ok)
-        file = match.GetMatchAtIndex(1);
+        file = match[1];
     return ok;
 }
 
@@ -141,23 +143,23 @@
     // is remains is assumed to be the filename.
 
     // Match LineEntry using regex.
-    static MIUtilParse::CRegexParser g_lineentry_nocol_regex( 
-        "^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$");
-    static MIUtilParse::CRegexParser g_lineentry_col_regex( 
-        "^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$");
-        //     ^1=start         ^2=end               ^3=f ^4=line ^5=:col(opt)
+    static llvm::Regex g_lineentry_nocol_regex(
+        llvm::StringRef("^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+)$"));
+    static llvm::Regex g_lineentry_col_regex(
+        llvm::StringRef("^ *\\[(0x[0-9a-fA-F]+)-(0x[0-9a-fA-F]+)\\): (.+):([0-9]+):[0-9]+$"));
+        //                     ^1=start         ^2=end               ^3=f ^4=line ^5=:col(opt)
 
-    MIUtilParse::CRegexParser::Match match(6);
+    llvm::SmallVector<llvm::StringRef, 6> match;
 
     // First try matching the LineEntry with the column,
     // then try without the column.
-    const bool ok = g_lineentry_col_regex.Execute(input, match) ||
-                    g_lineentry_nocol_regex.Execute(input, match);
+    const bool ok = g_lineentry_col_regex.match(input, &match) ||
+                    g_lineentry_nocol_regex.match(input, &match);
     if (ok)
     {
-        addr = match.GetMatchAtIndex(1);
-        file = match.GetMatchAtIndex(3);
-        line = match.GetMatchAtIndex(4);
+        addr = match[1];
+        file = match[3];
+        line = match[4];
     }
     return ok;
 }