From fa0954c587fcbc3951f3e14864d8c66bad872d41 Mon Sep 17 00:00:00 2001 From: gufengwyx8 <466144425@qq.com> Date: Tue, 5 Apr 2016 12:41:15 +0800 Subject: [PATCH] add symbols map for pattern character --- .../lanwen/verbalregex/VerbalExpression.java | 73 ++++++------------- 1 file changed, 22 insertions(+), 51 deletions(-) diff --git a/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java b/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java index 506ea3d..1a811bc 100644 --- a/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java +++ b/src/main/java/ru/lanwen/verbalregex/VerbalExpression.java @@ -3,7 +3,9 @@ import static java.lang.String.valueOf; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -18,6 +20,19 @@ public static class Builder { private StringBuilder suffixes = new StringBuilder(); private int modifiers = Pattern.MULTILINE; + private static final Map SYMBOL_MAP; + + static { + SYMBOL_MAP = new HashMap<>(); + SYMBOL_MAP.put('d', Pattern.UNIX_LINES); + SYMBOL_MAP.put('i', Pattern.CASE_INSENSITIVE); + SYMBOL_MAP.put('x', Pattern.COMMENTS); + SYMBOL_MAP.put('m', Pattern.MULTILINE); + SYMBOL_MAP.put('s', Pattern.DOTALL); + SYMBOL_MAP.put('u', Pattern.UNICODE_CASE); + SYMBOL_MAP.put('U', Pattern.UNICODE_CHARACTER_CLASS); + } + /** * Package private. Use {@link #regex()} to build a new one * @@ -172,7 +187,7 @@ public Builder find(final String value) { public Builder maybe(final String pValue) { return this.then(pValue).add("?"); } - + /** * Add a regex to the expression that might appear once (or not) * Example: @@ -367,60 +382,16 @@ public Builder range(final String... pArgs) { } public Builder addModifier(final char pModifier) { - switch (pModifier) { - case 'd': - modifiers |= Pattern.UNIX_LINES; - break; - case 'i': - modifiers |= Pattern.CASE_INSENSITIVE; - break; - case 'x': - modifiers |= Pattern.COMMENTS; - break; - case 'm': - modifiers |= Pattern.MULTILINE; - break; - case 's': - modifiers |= Pattern.DOTALL; - break; - case 'u': - modifiers |= Pattern.UNICODE_CASE; - break; - case 'U': - modifiers |= Pattern.UNICODE_CHARACTER_CLASS; - break; - default: - break; + if (SYMBOL_MAP.containsKey(pModifier)) { + modifiers |= SYMBOL_MAP.get(pModifier); } return this; } public Builder removeModifier(final char pModifier) { - switch (pModifier) { - case 'd': - modifiers &= ~Pattern.UNIX_LINES; - break; - case 'i': - modifiers &= ~Pattern.CASE_INSENSITIVE; - break; - case 'x': - modifiers &= ~Pattern.COMMENTS; - break; - case 'm': - modifiers &= ~Pattern.MULTILINE; - break; - case 's': - modifiers &= ~Pattern.DOTALL; - break; - case 'u': - modifiers &= ~Pattern.UNICODE_CASE; - break; - case 'U': - modifiers &= ~Pattern.UNICODE_CHARACTER_CLASS; - break; - default: - break; + if (SYMBOL_MAP.containsKey(pModifier)) { + modifiers &= ~SYMBOL_MAP.get(pModifier); } return this; @@ -578,7 +549,7 @@ public Builder or(final String pValue) { } return this; } - + /** * Adds an alternative expression to be matched * based on an array of values @@ -750,7 +721,7 @@ public String getText(final String toTest, final int group) { /** * Extract exact group from string and add it to list - * + * * Example: * String text = "SampleHelloWorldString"; * VerbalExpression regex = regex().capt().oneOf("Hello", "World").endCapt().maybe("String").build();