diff -r ce33736066b1 -r 0b05bc13aadd java/sql-dk/src/info/globalcode/sql/dk/Functions.java --- a/java/sql-dk/src/info/globalcode/sql/dk/Functions.java Tue Dec 24 00:12:53 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/Functions.java Tue Dec 24 00:15:04 2013 +0100 @@ -133,4 +133,29 @@ Arrays.fill(array, ch); return new String(array); } + + /** + * @param original any text + * @return escaped text that can be used as part of an regular expression, matches the original + * text + */ + public static String escapeRegEx(String original) { + StringBuilder escaped = new StringBuilder(original.length() * 3); + + escaped.append("\\Q"); // start quotation + for (int i = 0; i < original.length(); i++) { + char ch = original.charAt(i); + if (ch == 'E' && i > 0 && original.charAt(i - 1) == '\\') { + escaped.append(ch); // this unintentionally ends quotation + escaped.append("\\\\E"); // insert escaped \E (eaten before) + escaped.append("\\Q"); // re-start quotation + } else { + escaped.append(ch); + } + + } + escaped.append("\\E"); // end quotation + + return escaped.toString(); + } }