You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Loic Guibert (JIRA)" <ji...@apache.org> on 2015/11/05 14:28:27 UTC

[jira] [Resolved] (LANG-1185) Add remove by regular expression methods in StringUtils

     [ https://issues.apache.org/jira/browse/LANG-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Loic Guibert resolved LANG-1185.
--------------------------------
       Resolution: Fixed
    Fix Version/s: 3.5

> Add remove by regular expression methods in StringUtils
> -------------------------------------------------------
>
>                 Key: LANG-1185
>                 URL: https://issues.apache.org/jira/browse/LANG-1185
>             Project: Commons Lang
>          Issue Type: New Feature
>          Components: lang.*
>            Reporter: Loic Guibert
>            Assignee: Loic Guibert
>             Fix For: 3.5
>
>
> Add null safe methods in {{StringUtils}} to remove from text by regular expression :
> {code:java}
> public static String removeAll(final String text, final String regex);
> public static String removeFirst(final String text, final String regex);
> {code}
> The {{removePattern(final String source, final String regex)}} method adds {{Pattern#DOTALL}} option by default which may be undesired.
> More details :
> {code:java}
> /**
>  * <p>Removes each substring of the text String that matches the given regular expression.</p>
>  *
>  * This method is a {@code null} safe equivalent to:
>  * <ul>
>  *  <li>{@code text.replaceAll(regex, StringUtils.EMPTY)}</li>
>  *  <li>{@code Pattern.compile(regex).matcher(text).replaceAll(StringUtils.EMPTY)}</li>
>  * </ul>
>  *
>  * <p>A {@code null} reference passed to this method is a no-op.</p>
>  *
>  * <p>Unlike in the {@link #removePattern(String, String)} method, the {@link Pattern#DOTALL} option
>  * is NOT automatically added.
>  * To use the DOTALL option prepend <code>"(?s)"</code> to the regex.
>  * DOTALL is also know as single-line mode in Perl.</p>
>  *
>  * <pre>
>  * StringUtils.removeAll(null, *)      = null
>  * StringUtils.removeAll("any", null)  = "any"
>  * StringUtils.removeAll("any", "")    = "any"
>  * StringUtils.removeAll("any", ".*")  = ""
>  * StringUtils.removeAll("any", ".+")  = ""
>  * StringUtils.removeAll("abc", ".?")  = ""
>  * StringUtils.removeAll("A<__>\n<__>B", "<.*>")      = "A\nB"
>  * StringUtils.removeAll("A<__>\n<__>B", "(?s)<.*>")  = "AB"
>  * StringUtils.removeAll("ABCabc123abc", "[a-z]")     = "ABC123"
>  * </pre>
>  *
>  * @param text  text to remove from, may be null
>  * @param regex  the regular expression to which this string is to be matched
>  * @return  the text with any removes processed,
>  *              {@code null} if null String input
>  *
>  * @throws  java.util.regex.PatternSyntaxException
>  *              if the regular expression's syntax is invalid
>  *
>  * @see #replaceAll(String, String, String)
>  * @see #removePattern(String, String)
>  * @see String#replaceAll(String, String)
>  * @see java.util.regex.Pattern
>  * @see java.util.regex.Pattern#DOTALL
>  * @since 3.5
>  */
> public static String removeAll(final String text, final String regex);
> /**
>  * <p>Removes the first substring of the text string that matches the given regular expression.</p>
>  *
>  * This method is a {@code null} safe equivalent to:
>  * <ul>
>  *  <li>{@code text.replaceFirst(regex, StringUtils.EMPTY)}</li>
>  *  <li>{@code Pattern.compile(regex).matcher(text).replaceFirst(StringUtils.EMPTY)}</li>
>  * </ul>
>  *
>  * <p>A {@code null} reference passed to this method is a no-op.</p>
>  *
>  * <p>The {@link Pattern#DOTALL} option is NOT automatically added.
>  * To use the DOTALL option prepend <code>"(?s)"</code> to the regex.
>  * DOTALL is also know as single-line mode in Perl.</p>
>  *
>  * <pre>
>  * StringUtils.removeFirst(null, *)      = null
>  * StringUtils.removeFirst("any", null)  = "any"
>  * StringUtils.removeFirst("any", "")    = "any"
>  * StringUtils.removeFirst("any", ".*")  = ""
>  * StringUtils.removeFirst("any", ".+")  = ""
>  * StringUtils.removeFirst("abc", ".?")  = "bc"
>  * StringUtils.removeFirst("A<__>\n<__>B", "<.*>")      = "A\n<__>B"
>  * StringUtils.removeFirst("A<__>\n<__>B", "(?s)<.*>")  = "AB"
>  * StringUtils.removeFirst("ABCabc123", "[a-z]")          = "ABCbc123"
>  * StringUtils.removeFirst("ABCabc123abc", "[a-z]+")      = "ABC123abc"
>  * </pre>
>  *
>  * @param text  text to remove from, may be null
>  * @param regex  the regular expression to which this string is to be matched
>  * @return  the text with the first replacement processed,
>  *              {@code null} if null String input
>  *
>  * @throws  java.util.regex.PatternSyntaxException
>  *              if the regular expression's syntax is invalid
>  *
>  * @see #replaceFirst(String, String, String)
>  * @see String#replaceFirst(String, String)
>  * @see java.util.regex.Pattern
>  * @see java.util.regex.Pattern#DOTALL
>  * @since 3.5
>  */
> public static String removeFirst(final String text, final String regex);
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)