diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index b56f567..0504c26 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -1442,6 +1442,11 @@ public abstract class Strman { .map(w -> upperFirst(w.toLowerCase())).collect(joining(" ")); } + public static String escapeRegExp(final String input) { + validate(input, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); + return input.replaceAll("[\\\\\\^\\$\\*\\+\\-\\?\\.\\|\\(\\)\\{\\}\\[\\]]", "\\\\$0"); + } + private static void validate(String value, Predicate predicate, final Supplier supplier) { if (predicate.test(value)) { throw new IllegalArgumentException(supplier.get()); diff --git a/src/test/java/strman/StrmanTests.java b/src/test/java/strman/StrmanTests.java index 3a3c7fd..d2db29b 100644 --- a/src/test/java/strman/StrmanTests.java +++ b/src/test/java/strman/StrmanTests.java @@ -1212,4 +1212,30 @@ public class StrmanTests { assertThat(startCase("--dashes--"), equalTo("Dashes")); assertThat(startCase("dashes----between----words"), equalTo("Dashes Between Words")); } + + @Test(expected = IllegalArgumentException.class) + public void escapeRegExp_shouldThrowException() throws Exception { + escapeRegExp(null); + } + + @Test + public void escapeRegExp_shouldEscapeRegExp() throws Exception { + assertThat(escapeRegExp("\\"), equalTo("\\\\")); + assertThat(escapeRegExp("^"), equalTo("\\^")); + assertThat(escapeRegExp("$"), equalTo("\\$")); + assertThat(escapeRegExp("*"), equalTo("\\*")); + assertThat(escapeRegExp("+"), equalTo("\\+")); + assertThat(escapeRegExp("-"), equalTo("\\-")); + assertThat(escapeRegExp("?"), equalTo("\\?")); + assertThat(escapeRegExp("."), equalTo("\\.")); + assertThat(escapeRegExp("|"), equalTo("\\|")); + assertThat(escapeRegExp("("), equalTo("\\(")); + assertThat(escapeRegExp(")"), equalTo("\\)")); + assertThat(escapeRegExp("{"), equalTo("\\{")); + assertThat(escapeRegExp("}"), equalTo("\\}")); + assertThat(escapeRegExp("["), equalTo("\\[")); + assertThat(escapeRegExp("]"), equalTo("\\]")); + assertThat(escapeRegExp("How much is (2+3)? 5"), equalTo("How much is \\(2\\+3\\)\\? 5")); + assertThat(escapeRegExp("\\s|_|-|(?<=[a-z])(?=[A-Z])"), equalTo("\\\\s\\|_\\|\\-\\|\\(\\?<=\\[a\\-z\\]\\)\\(\\?=\\[A\\-Z\\]\\)")); + } }