aaf72102b545c05c42f66b7a3fc22d65b1ecf4fe
angie
  Mon Aug 8 14:12:39 2016 -0700
Added recognition of a small subset of HGVS terms: coding (c.) SNVs relative to RefSeq NM_ or LRG transcript IDs,
and protein (p.) simple substitutions relative to NP_.
Also accepted (not HGVS but similar and popular): geneSymbol and abbreviated protein subst like "ALK G1494E".
hgFind will map terms to the current genome if possible, and will display warnings about unrecognized accessions,
out-of-bounds coordinates and mismatching reference alleles.
refs #15071, #15554

diff --git src/inc/regexHelper.h src/inc/regexHelper.h
index 37c5e70..dfcde85 100644
--- src/inc/regexHelper.h
+++ src/inc/regexHelper.h
@@ -14,16 +14,37 @@
 /* Return TRUE if string matches regular expression exp (case sensitive). */
 
 boolean regexMatchNoCase(const char *string, const char *exp);
 /* Return TRUE if string matches regular expression exp (case insensitive). */
 
 boolean regexMatchSubstr(const char *string, const char *exp,
 			 regmatch_t substrArr[], size_t substrArrSize);
 /* Return TRUE if string matches regular expression exp (case sensitive);
  * regexec fills in substrArr with substring offsets. */
 
 boolean regexMatchSubstrNoCase(const char *string, const char *exp,
 			       regmatch_t substrArr[], size_t substrArrSize);
 /* Return TRUE if string matches regular expression exp (case insensitive);
  * regexec fills in substrArr with substring offsets. */
 
+INLINE boolean regexSubstrMatched(const regmatch_t substr)
+/* Return TRUE if both start and end offsets are nonnegative (when a substring is not matched,
+ * regexec sets the start and end offsets to -1). */
+{
+return (substr.rm_so >= 0 && substr.rm_eo >= 0 && substr.rm_eo >= substr.rm_so);
+}
+
+void regexSubstringCopy(const char *string, const regmatch_t substr,
+                        char *buf, size_t bufSize);
+/* Copy a substring from string into buf using start and end offsets from substr.
+ * If the substring was not matched then make buf an empty string. */
+
+char *regexSubstringClone(const char *string, const regmatch_t substr);
+/* Clone and return a substring from string using start and end offsets from substr.
+ * If the substring was not matched then return a cloned empty string. */
+
+int regexSubstringInt(const char *string, const regmatch_t substr);
+/* Return the integer value of the substring specified by substr.
+ * If substr was not matched, return 0; you can check first with regexSubstrMatched() if
+ * that's not the desired behavior for unmatched substr. */
+
 #endif // REGEXHELPER_H