You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Benedikt Ritter <br...@apache.org> on 2015/06/02 08:24:19 UTC

Re: [LANG] Adding StringUtils replace by regular expression methods

Hello Loic,

I really appreciate your effort to get this code into lang. Thank you very
much!
Sorry that I'm unable to give you timely feedback on the proposed changes.
I'm pretty busy at work at the moment and I've almost zero time for OSS
right now :-(
I'll review the changes as soon as I have some more time.

Sorry again for the inconvenience!

Benedikt

2015-05-28 14:42 GMT+02:00 Loic Guibert <lf...@yahoo.fr>:

> Hello,
> I implemented 2 null safe methods to replace into a String with regular
> expression :
>   - String replaceAll(String text, String regex, String replacement);
>   - String replaceFirst(String text, String regex, String replacement);
>
>
> The StringUtils.replacePattern(String source, String regex, String
> replacement) method adds Pattern#DOTALL option by default which may be
> undesired. Moreover, this methods is not null safe.
>
> I think it could be added to StringUtils.
> I opened a JIRA ticket (LANG-1139) and an associated Pull Request (#92)
>
>
> There is detail :
>
> /**
>  * <p>Replaces each substring of the text String that matches the given
> regular expression
>  * with the given replacement.</p>
>  *
>  * This method is a {@code null} safe equivalent to:
>  * <ul>
>  *  <li>{@code text.replaceAll(regex, replacement)}</li>
>  *  <li>{@code
> Pattern.compile(regex).matcher(text).replaceAll(replacement)}</li>
>  * </ul>
>  *
>  * <p>A {@code null} reference passed to this method is a no-op.</p>
>  *
>  * <p>Unlike in the {@link #replacePattern(String, 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.replaceAll(null, *, *)       = null
>  * StringUtils.replaceAll("any", null, *)   = "any"
>  * StringUtils.replaceAll("any", *, null)   = "any"
>  * StringUtils.replaceAll("", "", "zzz")    = "zzz"
>  * StringUtils.replaceAll("", ".*", "zzz")  = "zzz"
>  * StringUtils.replaceAll("", ".+", "zzz")  = ""
>  * StringUtils.replaceAll("<__>\n<__>", "<.*>", "z")      = "z\nz"
>  * StringUtils.replaceAll("<__>\n<__>", "(?s)<.*>", "z")  = "z"
>  * StringUtils.replaceAll("ABCabc123", "[a-z]", "_")       = "ABC___123"
>  * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "_")  = "ABC_123"
>  * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "")   = "ABC123"
>  * StringUtils.replaceAll("Lorem ipsum  dolor   sit", "( +)([a-z]+)",
> "_$2") = "Lorem_ipsum_dolor_sit"
>  * </pre>
>  *
>  * @param text  text to search and replace in, may be null
>  * @param regex  the regular expression to which this string is to be
> matched
>  * @param replacement  the string to be substituted for each match
>  * @return  the text with any replacements processed,
>  *              {@code null} if null String input
>  *
>  * @throws  PatternSyntaxException
>  *              if the regular expression's syntax is invalid
>  *
>  * @see String#replaceAll(String, String)
>  * @see java.util.regex.Pattern
>  * @see java.util.regex.Pattern#DOTALL
>  */
> public static String replaceAll(final String text, final String regex,
> final String replacement);
>
> /**
>  * <p>Replaces the first substring of the text string that matches the
> given regular expression
>  * with the given replacement.</p>
>  *
>  * This method is a {@code null} safe equivalent to:
>  * <ul>
>  *  <li>{@code text.replaceFirst(regex, replacement)}</li>
>  *  <li>{@code
> Pattern.compile(regex).matcher(text).replaceFirst(replacement)}</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.replaceFirst(null, *, *)       = null
>  * StringUtils.replaceFirst("any", null, *)   = "any"
>  * StringUtils.replaceFirst("any", *, null)   = "any"
>  * StringUtils.replaceFirst("", "", "zzz")    = "zzz"
>  * StringUtils.replaceFirst("", ".*", "zzz")  = "zzz"
>  * StringUtils.replaceFirst("", ".+", "zzz")  = ""
>  * StringUtils.replaceFirst("<__>\n<__>", "<.*>", "z")      = "z\n<__>"
>  * StringUtils.replaceFirst("<__>\n<__>", "(?s)<.*>", "z")  = "z"
>  * StringUtils.replaceFirst("ABCabc123", "[a-z]", "_")          =
> "ABC_bc123"
>  * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_")  =
> "ABC_123abc"
>  * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "")   =
> "ABC123abc"
>  * StringUtils.replaceFirst("Lorem ipsum  dolor   sit", "( +)([a-z]+)",
> "_$2")  = "Lorem_ipsum  dolor   sit"
>  * </pre>
>  *
>  * @param text  text to search and replace in, may be null
>  * @param regex  the regular expression to which this string is to be
> matched
>  * @param replacement  the string to be substituted for the first match
>  * @return  the text with the first replacement processed,
>  *              {@code null} if null String input
>  *
>  * @throws  PatternSyntaxException
>  *              if the regular expression's syntax is invalid
>  *
>  * @see String#replaceFirst(String, String)
>  * @see java.util.regex.Pattern
>  * @see java.util.regex.Pattern#DOTALL
>  */
> public static String replaceFirst(final String text, final String regex,
> final String replacement);
>
>
> Regards,
>
> --
> Loic Guibert
> PGP : 0x65EB4F33
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter

Re: [LANG] Adding StringUtils replace by regular expression methods

Posted by Benedikt Ritter <br...@apache.org>.
Hello Loic,

see my comment on the other thread. When I get the time to release 3.5 I'll
have a look at the tickets, promise! ;-)

Regards and thank you,
Benedikt

2015-07-28 12:20 GMT+02:00 Loic Guibert <lf...@yahoo.fr>:

> Hello Benedikt,
> LANG version 3.5 being about to be released, have you had time to look
> at these 2 methods ?
>
> https://issues.apache.org/jira/browse/LANG-1139
> https://github.com/apache/commons-lang/pull/92
>
> Loic Guibert
> PGP : 0x65EB4F33
>
>
> Le 02/06/2015 10:24, Benedikt Ritter a écrit :
> > Hello Loic,
> >
> > I really appreciate your effort to get this code into lang. Thank you
> very
> > much!
> > Sorry that I'm unable to give you timely feedback on the proposed
> changes.
> > I'm pretty busy at work at the moment and I've almost zero time for OSS
> > right now :-(
> > I'll review the changes as soon as I have some more time.
> >
> > Sorry again for the inconvenience!
> >
> > Benedikt
> >
> > 2015-05-28 14:42 GMT+02:00 Loic Guibert <lf...@yahoo.fr>:
> >
> >> Hello,
> >> I implemented 2 null safe methods to replace into a String with regular
> >> expression :
> >>   - String replaceAll(String text, String regex, String replacement);
> >>   - String replaceFirst(String text, String regex, String replacement);
> >>
> >>
> >> The StringUtils.replacePattern(String source, String regex, String
> >> replacement) method adds Pattern#DOTALL option by default which may be
> >> undesired. Moreover, this methods is not null safe.
> >>
> >> I think it could be added to StringUtils.
> >> I opened a JIRA ticket (LANG-1139) and an associated Pull Request (#92)
> >>
> >>
> >> There is detail :
> >>
> >> /**
> >>  * <p>Replaces each substring of the text String that matches the given
> >> regular expression
> >>  * with the given replacement.</p>
> >>  *
> >>  * This method is a {@code null} safe equivalent to:
> >>  * <ul>
> >>  *  <li>{@code text.replaceAll(regex, replacement)}</li>
> >>  *  <li>{@code
> >> Pattern.compile(regex).matcher(text).replaceAll(replacement)}</li>
> >>  * </ul>
> >>  *
> >>  * <p>A {@code null} reference passed to this method is a no-op.</p>
> >>  *
> >>  * <p>Unlike in the {@link #replacePattern(String, 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.replaceAll(null, *, *)       = null
> >>  * StringUtils.replaceAll("any", null, *)   = "any"
> >>  * StringUtils.replaceAll("any", *, null)   = "any"
> >>  * StringUtils.replaceAll("", "", "zzz")    = "zzz"
> >>  * StringUtils.replaceAll("", ".*", "zzz")  = "zzz"
> >>  * StringUtils.replaceAll("", ".+", "zzz")  = ""
> >>  * StringUtils.replaceAll("<__>\n<__>", "<.*>", "z")      = "z\nz"
> >>  * StringUtils.replaceAll("<__>\n<__>", "(?s)<.*>", "z")  = "z"
> >>  * StringUtils.replaceAll("ABCabc123", "[a-z]", "_")       = "ABC___123"
> >>  * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "_")  = "ABC_123"
> >>  * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "")   = "ABC123"
> >>  * StringUtils.replaceAll("Lorem ipsum  dolor   sit", "( +)([a-z]+)",
> >> "_$2") = "Lorem_ipsum_dolor_sit"
> >>  * </pre>
> >>  *
> >>  * @param text  text to search and replace in, may be null
> >>  * @param regex  the regular expression to which this string is to be
> >> matched
> >>  * @param replacement  the string to be substituted for each match
> >>  * @return  the text with any replacements processed,
> >>  *              {@code null} if null String input
> >>  *
> >>  * @throws  PatternSyntaxException
> >>  *              if the regular expression's syntax is invalid
> >>  *
> >>  * @see String#replaceAll(String, String)
> >>  * @see java.util.regex.Pattern
> >>  * @see java.util.regex.Pattern#DOTALL
> >>  */
> >> public static String replaceAll(final String text, final String regex,
> >> final String replacement);
> >>
> >> /**
> >>  * <p>Replaces the first substring of the text string that matches the
> >> given regular expression
> >>  * with the given replacement.</p>
> >>  *
> >>  * This method is a {@code null} safe equivalent to:
> >>  * <ul>
> >>  *  <li>{@code text.replaceFirst(regex, replacement)}</li>
> >>  *  <li>{@code
> >> Pattern.compile(regex).matcher(text).replaceFirst(replacement)}</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.replaceFirst(null, *, *)       = null
> >>  * StringUtils.replaceFirst("any", null, *)   = "any"
> >>  * StringUtils.replaceFirst("any", *, null)   = "any"
> >>  * StringUtils.replaceFirst("", "", "zzz")    = "zzz"
> >>  * StringUtils.replaceFirst("", ".*", "zzz")  = "zzz"
> >>  * StringUtils.replaceFirst("", ".+", "zzz")  = ""
> >>  * StringUtils.replaceFirst("<__>\n<__>", "<.*>", "z")      = "z\n<__>"
> >>  * StringUtils.replaceFirst("<__>\n<__>", "(?s)<.*>", "z")  = "z"
> >>  * StringUtils.replaceFirst("ABCabc123", "[a-z]", "_")          =
> >> "ABC_bc123"
> >>  * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_")  =
> >> "ABC_123abc"
> >>  * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "")   =
> >> "ABC123abc"
> >>  * StringUtils.replaceFirst("Lorem ipsum  dolor   sit", "( +)([a-z]+)",
> >> "_$2")  = "Lorem_ipsum  dolor   sit"
> >>  * </pre>
> >>  *
> >>  * @param text  text to search and replace in, may be null
> >>  * @param regex  the regular expression to which this string is to be
> >> matched
> >>  * @param replacement  the string to be substituted for the first match
> >>  * @return  the text with the first replacement processed,
> >>  *              {@code null} if null String input
> >>  *
> >>  * @throws  PatternSyntaxException
> >>  *              if the regular expression's syntax is invalid
> >>  *
> >>  * @see String#replaceFirst(String, String)
> >>  * @see java.util.regex.Pattern
> >>  * @see java.util.regex.Pattern#DOTALL
> >>  */
> >> public static String replaceFirst(final String text, final String regex,
> >> final String replacement);
> >>
> >>
> >> Regards,
> >>
> >> --
> >> Loic Guibert
> >> PGP : 0x65EB4F33
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: dev-help@commons.apache.org
> >>
> >>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter

Re: [LANG] Adding StringUtils replace by regular expression methods

Posted by Loic Guibert <lf...@yahoo.fr>.
Hello Benedikt,
LANG version 3.5 being about to be released, have you had time to look
at these 2 methods ?

https://issues.apache.org/jira/browse/LANG-1139
https://github.com/apache/commons-lang/pull/92

Loic Guibert
PGP : 0x65EB4F33


Le 02/06/2015 10:24, Benedikt Ritter a écrit :
> Hello Loic,
>
> I really appreciate your effort to get this code into lang. Thank you very
> much!
> Sorry that I'm unable to give you timely feedback on the proposed changes.
> I'm pretty busy at work at the moment and I've almost zero time for OSS
> right now :-(
> I'll review the changes as soon as I have some more time.
>
> Sorry again for the inconvenience!
>
> Benedikt
>
> 2015-05-28 14:42 GMT+02:00 Loic Guibert <lf...@yahoo.fr>:
>
>> Hello,
>> I implemented 2 null safe methods to replace into a String with regular
>> expression :
>>   - String replaceAll(String text, String regex, String replacement);
>>   - String replaceFirst(String text, String regex, String replacement);
>>
>>
>> The StringUtils.replacePattern(String source, String regex, String
>> replacement) method adds Pattern#DOTALL option by default which may be
>> undesired. Moreover, this methods is not null safe.
>>
>> I think it could be added to StringUtils.
>> I opened a JIRA ticket (LANG-1139) and an associated Pull Request (#92)
>>
>>
>> There is detail :
>>
>> /**
>>  * <p>Replaces each substring of the text String that matches the given
>> regular expression
>>  * with the given replacement.</p>
>>  *
>>  * This method is a {@code null} safe equivalent to:
>>  * <ul>
>>  *  <li>{@code text.replaceAll(regex, replacement)}</li>
>>  *  <li>{@code
>> Pattern.compile(regex).matcher(text).replaceAll(replacement)}</li>
>>  * </ul>
>>  *
>>  * <p>A {@code null} reference passed to this method is a no-op.</p>
>>  *
>>  * <p>Unlike in the {@link #replacePattern(String, 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.replaceAll(null, *, *)       = null
>>  * StringUtils.replaceAll("any", null, *)   = "any"
>>  * StringUtils.replaceAll("any", *, null)   = "any"
>>  * StringUtils.replaceAll("", "", "zzz")    = "zzz"
>>  * StringUtils.replaceAll("", ".*", "zzz")  = "zzz"
>>  * StringUtils.replaceAll("", ".+", "zzz")  = ""
>>  * StringUtils.replaceAll("<__>\n<__>", "<.*>", "z")      = "z\nz"
>>  * StringUtils.replaceAll("<__>\n<__>", "(?s)<.*>", "z")  = "z"
>>  * StringUtils.replaceAll("ABCabc123", "[a-z]", "_")       = "ABC___123"
>>  * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "_")  = "ABC_123"
>>  * StringUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "")   = "ABC123"
>>  * StringUtils.replaceAll("Lorem ipsum  dolor   sit", "( +)([a-z]+)",
>> "_$2") = "Lorem_ipsum_dolor_sit"
>>  * </pre>
>>  *
>>  * @param text  text to search and replace in, may be null
>>  * @param regex  the regular expression to which this string is to be
>> matched
>>  * @param replacement  the string to be substituted for each match
>>  * @return  the text with any replacements processed,
>>  *              {@code null} if null String input
>>  *
>>  * @throws  PatternSyntaxException
>>  *              if the regular expression's syntax is invalid
>>  *
>>  * @see String#replaceAll(String, String)
>>  * @see java.util.regex.Pattern
>>  * @see java.util.regex.Pattern#DOTALL
>>  */
>> public static String replaceAll(final String text, final String regex,
>> final String replacement);
>>
>> /**
>>  * <p>Replaces the first substring of the text string that matches the
>> given regular expression
>>  * with the given replacement.</p>
>>  *
>>  * This method is a {@code null} safe equivalent to:
>>  * <ul>
>>  *  <li>{@code text.replaceFirst(regex, replacement)}</li>
>>  *  <li>{@code
>> Pattern.compile(regex).matcher(text).replaceFirst(replacement)}</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.replaceFirst(null, *, *)       = null
>>  * StringUtils.replaceFirst("any", null, *)   = "any"
>>  * StringUtils.replaceFirst("any", *, null)   = "any"
>>  * StringUtils.replaceFirst("", "", "zzz")    = "zzz"
>>  * StringUtils.replaceFirst("", ".*", "zzz")  = "zzz"
>>  * StringUtils.replaceFirst("", ".+", "zzz")  = ""
>>  * StringUtils.replaceFirst("<__>\n<__>", "<.*>", "z")      = "z\n<__>"
>>  * StringUtils.replaceFirst("<__>\n<__>", "(?s)<.*>", "z")  = "z"
>>  * StringUtils.replaceFirst("ABCabc123", "[a-z]", "_")          =
>> "ABC_bc123"
>>  * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_")  =
>> "ABC_123abc"
>>  * StringUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "")   =
>> "ABC123abc"
>>  * StringUtils.replaceFirst("Lorem ipsum  dolor   sit", "( +)([a-z]+)",
>> "_$2")  = "Lorem_ipsum  dolor   sit"
>>  * </pre>
>>  *
>>  * @param text  text to search and replace in, may be null
>>  * @param regex  the regular expression to which this string is to be
>> matched
>>  * @param replacement  the string to be substituted for the first match
>>  * @return  the text with the first replacement processed,
>>  *              {@code null} if null String input
>>  *
>>  * @throws  PatternSyntaxException
>>  *              if the regular expression's syntax is invalid
>>  *
>>  * @see String#replaceFirst(String, String)
>>  * @see java.util.regex.Pattern
>>  * @see java.util.regex.Pattern#DOTALL
>>  */
>> public static String replaceFirst(final String text, final String regex,
>> final String replacement);
>>
>>
>> Regards,
>>
>> --
>> Loic Guibert
>> PGP : 0x65EB4F33
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org