View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.lang3;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertNull;
21  import static org.junit.jupiter.api.Assertions.assertThrows;
22  import static org.junit.jupiter.api.Assertions.assertTrue;
23  
24  import java.util.regex.Pattern;
25  import java.util.regex.PatternSyntaxException;
26  
27  import org.junit.jupiter.api.Test;
28  
29  /**
30   * Tests {@link RegExUtils}.
31   */
32  class RegExUtilsTest extends AbstractLangTest {
33  
34      @Test
35      void testDotAll() {
36          assertTrue(RegExUtils.dotAll("<A>.*</A>").matcher("<A>\nxy\n</A>").matches());
37      }
38  
39      @Test
40      void testDotAllMatcher() {
41          assertTrue(RegExUtils.dotAllMatcher("<A>.*</A>", (CharSequence) "<A>\nxy\n</A>").matches());
42      }
43  
44      @SuppressWarnings("deprecation")
45      @Test
46      void testDotAllMatcherDeprecated() {
47          assertTrue(RegExUtils.dotAllMatcher("<A>.*</A>", "<A>\nxy\n</A>").matches());
48      }
49  
50      @Test
51      void testRemoveAll() {
52          assertNull(RegExUtils.removeAll((CharSequence) null, Pattern.compile("")));
53          assertEquals("any", RegExUtils.removeAll((CharSequence) "any", (Pattern) null));
54  
55          assertEquals("any", RegExUtils.removeAll((CharSequence) "any", Pattern.compile("")));
56          assertEquals("", RegExUtils.removeAll((CharSequence) "any", Pattern.compile(".*")));
57          assertEquals("", RegExUtils.removeAll((CharSequence) "any", Pattern.compile(".+")));
58          assertEquals("", RegExUtils.removeAll((CharSequence) "any", Pattern.compile(".?")));
59  
60          assertEquals("A\nB", RegExUtils.removeAll((CharSequence) "A<__>\n<__>B", Pattern.compile("<.*>")));
61          assertEquals("AB", RegExUtils.removeAll((CharSequence) "A<__>\n<__>B", Pattern.compile("(?s)<.*>")));
62          assertEquals("ABC123", RegExUtils.removeAll((CharSequence) "ABCabc123abc", Pattern.compile("[a-z]")));
63  
64          assertEquals("AB", RegExUtils.removeAll((CharSequence) "A<__>\n<__>B", Pattern.compile("<.*>", Pattern.DOTALL)));
65          assertEquals("AB", RegExUtils.removeAll((CharSequence) "A<__>\\n<__>B", Pattern.compile("<.*>")));
66          assertEquals("", RegExUtils.removeAll((CharSequence) "<A>x\\ny</A>", Pattern.compile("<A>.*</A>")));
67          assertEquals("", RegExUtils.removeAll((CharSequence) "<A>\nxy\n</A>", Pattern.compile("<A>.*</A>", Pattern.DOTALL)));
68      }
69  
70      @Test
71      void testRemoveAll_StringString() {
72          assertNull(RegExUtils.removeAll(null, ""));
73          assertEquals("any", RegExUtils.removeAll("any", (String) null));
74          assertEquals("any", RegExUtils.removeAll("any", ""));
75          assertEquals("", RegExUtils.removeAll("any", ".*"));
76          assertEquals("", RegExUtils.removeAll("any", ".+"));
77          assertEquals("", RegExUtils.removeAll("any", ".?"));
78          assertEquals("A\nB", RegExUtils.removeAll("A<__>\n<__>B", "<.*>"));
79          assertEquals("AB", RegExUtils.removeAll("A<__>\n<__>B", "(?s)<.*>"));
80          assertEquals("ABC123", RegExUtils.removeAll("ABCabc123abc", "[a-z]"));
81          assertThrows(PatternSyntaxException.class, () -> RegExUtils.removeAll("any", "{badRegexSyntax}"),
82                  "RegExUtils.removeAll expecting PatternSyntaxException");
83      }
84  
85      @Test
86      void testRemoveAllDeprecated() {
87          assertNull(RegExUtils.removeAll(null, Pattern.compile("")));
88          assertEquals("any", RegExUtils.removeAll("any", (Pattern) null));
89  
90          assertEquals("any", RegExUtils.removeAll("any", Pattern.compile("")));
91          assertEquals("", RegExUtils.removeAll("any", Pattern.compile(".*")));
92          assertEquals("", RegExUtils.removeAll("any", Pattern.compile(".+")));
93          assertEquals("", RegExUtils.removeAll("any", Pattern.compile(".?")));
94  
95          assertEquals("A\nB", RegExUtils.removeAll("A<__>\n<__>B", Pattern.compile("<.*>")));
96          assertEquals("AB", RegExUtils.removeAll("A<__>\n<__>B", Pattern.compile("(?s)<.*>")));
97          assertEquals("ABC123", RegExUtils.removeAll("ABCabc123abc", Pattern.compile("[a-z]")));
98  
99          assertEquals("AB", RegExUtils.removeAll("A<__>\n<__>B", Pattern.compile("<.*>", Pattern.DOTALL)));
100         assertEquals("AB", RegExUtils.removeAll("A<__>\\n<__>B", Pattern.compile("<.*>")));
101         assertEquals("", RegExUtils.removeAll("<A>x\\ny</A>", Pattern.compile("<A>.*</A>")));
102         assertEquals("", RegExUtils.removeAll("<A>\nxy\n</A>", Pattern.compile("<A>.*</A>", Pattern.DOTALL)));
103     }
104 
105     @Test
106     void testRemoveFirst() {
107         assertNull(RegExUtils.removeFirst((CharSequence) null, Pattern.compile("")));
108         assertEquals("any", RegExUtils.removeFirst((CharSequence) "any", (Pattern) null));
109 
110         assertEquals("any", RegExUtils.removeFirst((CharSequence) "any", Pattern.compile("")));
111         assertEquals("", RegExUtils.removeFirst((CharSequence) "any", Pattern.compile(".*")));
112         assertEquals("", RegExUtils.removeFirst((CharSequence) "any", Pattern.compile(".+")));
113         assertEquals("bc", RegExUtils.removeFirst((CharSequence) "abc", Pattern.compile(".?")));
114 
115         assertEquals("A\n<__>B", RegExUtils.removeFirst((CharSequence) "A<__>\n<__>B", Pattern.compile("<.*>")));
116         assertEquals("AB", RegExUtils.removeFirst((CharSequence) "A<__>\n<__>B", Pattern.compile("(?s)<.*>")));
117         assertEquals("ABCbc123", RegExUtils.removeFirst((CharSequence) "ABCabc123", Pattern.compile("[a-z]")));
118         assertEquals("ABC123abc", RegExUtils.removeFirst((CharSequence) "ABCabc123abc", Pattern.compile("[a-z]+")));
119     }
120 
121     @Test
122     void testRemoveFirst_StringString() {
123         assertNull(RegExUtils.removeFirst(null, ""));
124         assertEquals("any", RegExUtils.removeFirst("any", (String) null));
125         assertEquals("any", RegExUtils.removeFirst("any", ""));
126         assertEquals("", RegExUtils.removeFirst("any", ".*"));
127         assertEquals("", RegExUtils.removeFirst("any", ".+"));
128         assertEquals("bc", RegExUtils.removeFirst("abc", ".?"));
129         assertEquals("A\n<__>B", RegExUtils.removeFirst("A<__>\n<__>B", "<.*>"));
130         assertEquals("AB", RegExUtils.removeFirst("A<__>\n<__>B", "(?s)<.*>"));
131         assertEquals("ABCbc123", RegExUtils.removeFirst("ABCabc123", "[a-z]"));
132         assertEquals("ABC123abc", RegExUtils.removeFirst("ABCabc123abc", "[a-z]+"));
133         assertThrows(PatternSyntaxException.class, () -> RegExUtils.removeFirst("any", "{badRegexSyntax}"),
134                 "RegExUtils.removeFirst expecting PatternSyntaxException");
135     }
136 
137     @Test
138     void testRemoveFirstDeprecated() {
139         assertNull(RegExUtils.removeFirst(null, Pattern.compile("")));
140         assertEquals("any", RegExUtils.removeFirst("any", (Pattern) null));
141 
142         assertEquals("any", RegExUtils.removeFirst("any", Pattern.compile("")));
143         assertEquals("", RegExUtils.removeFirst("any", Pattern.compile(".*")));
144         assertEquals("", RegExUtils.removeFirst("any", Pattern.compile(".+")));
145         assertEquals("bc", RegExUtils.removeFirst("abc", Pattern.compile(".?")));
146 
147         assertEquals("A\n<__>B", RegExUtils.removeFirst("A<__>\n<__>B", Pattern.compile("<.*>")));
148         assertEquals("AB", RegExUtils.removeFirst("A<__>\n<__>B", Pattern.compile("(?s)<.*>")));
149         assertEquals("ABCbc123", RegExUtils.removeFirst("ABCabc123", Pattern.compile("[a-z]")));
150         assertEquals("ABC123abc", RegExUtils.removeFirst("ABCabc123abc", Pattern.compile("[a-z]+")));
151     }
152 
153     @Test
154     void testRemovePattern() {
155         assertNull(RegExUtils.removePattern((CharSequence) null, ""));
156         assertEquals("any", RegExUtils.removePattern((CharSequence) "any", (String) null));
157 
158         assertEquals("", RegExUtils.removePattern((CharSequence) "", ""));
159         assertEquals("", RegExUtils.removePattern((CharSequence) "", ".*"));
160         assertEquals("", RegExUtils.removePattern((CharSequence) "", ".+"));
161 
162         assertEquals("AB", RegExUtils.removePattern((CharSequence) "A<__>\n<__>B", "<.*>"));
163         assertEquals("AB", RegExUtils.removePattern((CharSequence) "A<__>\\n<__>B", "<.*>"));
164         assertEquals("", RegExUtils.removePattern((CharSequence) "<A>x\\ny</A>", "<A>.*</A>"));
165         assertEquals("", RegExUtils.removePattern((CharSequence) "<A>\nxy\n</A>", "<A>.*</A>"));
166 
167         assertEquals("ABC123", RegExUtils.removePattern((CharSequence) "ABCabc123", "[a-z]"));
168     }
169 
170     @Test
171     void testRemovePatternDeprecated() {
172         assertNull(RegExUtils.removePattern(null, ""));
173         assertEquals("any", RegExUtils.removePattern("any", (String) null));
174 
175         assertEquals("", RegExUtils.removePattern("", ""));
176         assertEquals("", RegExUtils.removePattern("", ".*"));
177         assertEquals("", RegExUtils.removePattern("", ".+"));
178 
179         assertEquals("AB", RegExUtils.removePattern("A<__>\n<__>B", "<.*>"));
180         assertEquals("AB", RegExUtils.removePattern("A<__>\\n<__>B", "<.*>"));
181         assertEquals("", RegExUtils.removePattern("<A>x\\ny</A>", "<A>.*</A>"));
182         assertEquals("", RegExUtils.removePattern("<A>\nxy\n</A>", "<A>.*</A>"));
183 
184         assertEquals("ABC123", RegExUtils.removePattern("ABCabc123", "[a-z]"));
185     }
186 
187     @Test
188     void testReplaceAll() {
189         assertNull(RegExUtils.replaceAll((CharSequence) null, Pattern.compile(""), ""));
190 
191         assertEquals("any", RegExUtils.replaceAll((CharSequence) "any", (Pattern) null, ""));
192         assertEquals("any", RegExUtils.replaceAll((CharSequence) "any", Pattern.compile(""), null));
193 
194         assertEquals("zzz", RegExUtils.replaceAll((CharSequence) "", Pattern.compile(""), "zzz"));
195         assertEquals("zzz", RegExUtils.replaceAll((CharSequence) "", Pattern.compile(".*"), "zzz"));
196         assertEquals("", RegExUtils.replaceAll((CharSequence) "", Pattern.compile(".+"), "zzz"));
197         assertEquals("ZZaZZbZZcZZ", RegExUtils.replaceAll((CharSequence) "abc", Pattern.compile(""), "ZZ"));
198 
199         assertEquals("z\nz", RegExUtils.replaceAll((CharSequence) "<__>\n<__>", Pattern.compile("<.*>"), "z"));
200         assertEquals("z", RegExUtils.replaceAll((CharSequence) "<__>\n<__>", Pattern.compile("(?s)<.*>"), "z"));
201 
202         assertEquals("z", RegExUtils.replaceAll((CharSequence) "<__>\n<__>", Pattern.compile("<.*>", Pattern.DOTALL), "z"));
203         assertEquals("z", RegExUtils.replaceAll((CharSequence) "<__>\\n<__>", Pattern.compile("<.*>"), "z"));
204         assertEquals("X", RegExUtils.replaceAll((CharSequence) "<A>\nxy\n</A>", Pattern.compile("<A>.*</A>", Pattern.DOTALL), "X"));
205 
206         assertEquals("ABC___123", RegExUtils.replaceAll((CharSequence) "ABCabc123", Pattern.compile("[a-z]"), "_"));
207         assertEquals("ABC_123", RegExUtils.replaceAll((CharSequence) "ABCabc123", Pattern.compile("[^A-Z0-9]+"), "_"));
208         assertEquals("ABC123", RegExUtils.replaceAll((CharSequence) "ABCabc123", Pattern.compile("[^A-Z0-9]+"), ""));
209         assertEquals("Lorem_ipsum_dolor_sit", RegExUtils.replaceAll((CharSequence) "Lorem ipsum  dolor   sit", Pattern.compile("( +)([a-z]+)"), "_$2"));
210     }
211 
212     @Test
213     void testReplaceAll_StringStringString() {
214         assertNull(RegExUtils.replaceAll(null, "", ""));
215 
216         assertEquals("any", RegExUtils.replaceAll("any", (String) null, ""));
217         assertEquals("any", RegExUtils.replaceAll("any", "", null));
218 
219         assertEquals("zzz", RegExUtils.replaceAll("", "", "zzz"));
220         assertEquals("zzz", RegExUtils.replaceAll("", ".*", "zzz"));
221         assertEquals("", RegExUtils.replaceAll("", ".+", "zzz"));
222         assertEquals("ZZaZZbZZcZZ", RegExUtils.replaceAll("abc", "", "ZZ"));
223 
224         assertEquals("z\nz", RegExUtils.replaceAll("<__>\n<__>", "<.*>", "z"));
225         assertEquals("z", RegExUtils.replaceAll("<__>\n<__>", "(?s)<.*>", "z"));
226 
227         assertEquals("ABC___123", RegExUtils.replaceAll("ABCabc123", "[a-z]", "_"));
228         assertEquals("ABC_123", RegExUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", "_"));
229         assertEquals("ABC123", RegExUtils.replaceAll("ABCabc123", "[^A-Z0-9]+", ""));
230         assertEquals("Lorem_ipsum_dolor_sit", RegExUtils.replaceAll("Lorem ipsum  dolor   sit", "( +)([a-z]+)", "_$2"));
231 
232         assertThrows(PatternSyntaxException.class, () -> RegExUtils.replaceAll("any", "{badRegexSyntax}", ""),
233                 "RegExUtils.replaceAll expecting PatternSyntaxException");
234     }
235 
236     @Test
237     void testReplaceAllDeprecated() {
238         assertNull(RegExUtils.replaceAll(null, Pattern.compile(""), ""));
239 
240         assertEquals("any", RegExUtils.replaceAll("any", (Pattern) null, ""));
241         assertEquals("any", RegExUtils.replaceAll("any", Pattern.compile(""), null));
242 
243         assertEquals("zzz", RegExUtils.replaceAll("", Pattern.compile(""), "zzz"));
244         assertEquals("zzz", RegExUtils.replaceAll("", Pattern.compile(".*"), "zzz"));
245         assertEquals("", RegExUtils.replaceAll("", Pattern.compile(".+"), "zzz"));
246         assertEquals("ZZaZZbZZcZZ", RegExUtils.replaceAll("abc", Pattern.compile(""), "ZZ"));
247 
248         assertEquals("z\nz", RegExUtils.replaceAll("<__>\n<__>", Pattern.compile("<.*>"), "z"));
249         assertEquals("z", RegExUtils.replaceAll("<__>\n<__>", Pattern.compile("(?s)<.*>"), "z"));
250 
251         assertEquals("z", RegExUtils.replaceAll("<__>\n<__>", Pattern.compile("<.*>", Pattern.DOTALL), "z"));
252         assertEquals("z", RegExUtils.replaceAll("<__>\\n<__>", Pattern.compile("<.*>"), "z"));
253         assertEquals("X", RegExUtils.replaceAll("<A>\nxy\n</A>", Pattern.compile("<A>.*</A>", Pattern.DOTALL), "X"));
254 
255         assertEquals("ABC___123", RegExUtils.replaceAll("ABCabc123", Pattern.compile("[a-z]"), "_"));
256         assertEquals("ABC_123", RegExUtils.replaceAll("ABCabc123", Pattern.compile("[^A-Z0-9]+"), "_"));
257         assertEquals("ABC123", RegExUtils.replaceAll("ABCabc123", Pattern.compile("[^A-Z0-9]+"), ""));
258         assertEquals("Lorem_ipsum_dolor_sit", RegExUtils.replaceAll("Lorem ipsum  dolor   sit", Pattern.compile("( +)([a-z]+)"), "_$2"));
259     }
260 
261     @Test
262     void testReplaceFirst() {
263         assertNull(RegExUtils.replaceFirst((CharSequence) null, Pattern.compile(""), ""));
264 
265         assertEquals("any", RegExUtils.replaceFirst((CharSequence) "any", (Pattern) null, ""));
266         assertEquals("any", RegExUtils.replaceFirst((CharSequence) "any", Pattern.compile(""), null));
267 
268         assertEquals("zzz", RegExUtils.replaceFirst((CharSequence) "", Pattern.compile(""), "zzz"));
269         assertEquals("zzz", RegExUtils.replaceFirst((CharSequence) "", Pattern.compile(".*"), "zzz"));
270         assertEquals("", RegExUtils.replaceFirst((CharSequence) "", Pattern.compile(".+"), "zzz"));
271         assertEquals("ZZabc", RegExUtils.replaceFirst((CharSequence) "abc", Pattern.compile(""), "ZZ"));
272 
273         assertEquals("z\n<__>", RegExUtils.replaceFirst((CharSequence) "<__>\n<__>", Pattern.compile("<.*>"), "z"));
274         assertEquals("z", RegExUtils.replaceFirst((CharSequence) "<__>\n<__>", Pattern.compile("(?s)<.*>"), "z"));
275 
276         assertEquals("ABC_bc123", RegExUtils.replaceFirst((CharSequence) "ABCabc123", Pattern.compile("[a-z]"), "_"));
277         assertEquals("ABC_123abc", RegExUtils.replaceFirst((CharSequence) "ABCabc123abc", Pattern.compile("[^A-Z0-9]+"), "_"));
278         assertEquals("ABC123abc", RegExUtils.replaceFirst((CharSequence) "ABCabc123abc", Pattern.compile("[^A-Z0-9]+"), ""));
279         assertEquals("Lorem_ipsum  dolor   sit", RegExUtils.replaceFirst((CharSequence) "Lorem ipsum  dolor   sit", Pattern.compile("( +)([a-z]+)"), "_$2"));
280     }
281 
282     @Test
283     void testReplaceFirst_StringStringString() {
284         assertNull(RegExUtils.replaceFirst(null, "", ""));
285 
286         assertEquals("any", RegExUtils.replaceFirst("any", (String) null, ""));
287         assertEquals("any", RegExUtils.replaceFirst("any", "", null));
288 
289         assertEquals("zzz", RegExUtils.replaceFirst("", "", "zzz"));
290         assertEquals("zzz", RegExUtils.replaceFirst("", ".*", "zzz"));
291         assertEquals("", RegExUtils.replaceFirst("", ".+", "zzz"));
292         assertEquals("ZZabc", RegExUtils.replaceFirst("abc", "", "ZZ"));
293 
294         assertEquals("z\n<__>", RegExUtils.replaceFirst("<__>\n<__>", "<.*>", "z"));
295         assertEquals("z", RegExUtils.replaceFirst("<__>\n<__>", "(?s)<.*>", "z"));
296 
297         assertEquals("ABC_bc123", RegExUtils.replaceFirst("ABCabc123", "[a-z]", "_"));
298         assertEquals("ABC_123abc", RegExUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_"));
299         assertEquals("ABC123abc", RegExUtils.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", ""));
300         assertEquals("Lorem_ipsum  dolor   sit",
301                 RegExUtils.replaceFirst("Lorem ipsum  dolor   sit", "( +)([a-z]+)", "_$2"));
302 
303         assertThrows(PatternSyntaxException.class, () -> RegExUtils.replaceFirst("any", "{badRegexSyntax}", ""),
304                 "RegExUtils.replaceFirst expecting PatternSyntaxException");
305     }
306 
307     @Test
308     void testReplaceFirstDeprecated() {
309         assertNull(RegExUtils.replaceFirst(null, Pattern.compile(""), ""));
310 
311         assertEquals("any", RegExUtils.replaceFirst("any", (Pattern) null, ""));
312         assertEquals("any", RegExUtils.replaceFirst("any", Pattern.compile(""), null));
313 
314         assertEquals("zzz", RegExUtils.replaceFirst("", Pattern.compile(""), "zzz"));
315         assertEquals("zzz", RegExUtils.replaceFirst("", Pattern.compile(".*"), "zzz"));
316         assertEquals("", RegExUtils.replaceFirst("", Pattern.compile(".+"), "zzz"));
317         assertEquals("ZZabc", RegExUtils.replaceFirst("abc", Pattern.compile(""), "ZZ"));
318 
319         assertEquals("z\n<__>", RegExUtils.replaceFirst("<__>\n<__>", Pattern.compile("<.*>"), "z"));
320         assertEquals("z", RegExUtils.replaceFirst("<__>\n<__>", Pattern.compile("(?s)<.*>"), "z"));
321 
322         assertEquals("ABC_bc123", RegExUtils.replaceFirst("ABCabc123", Pattern.compile("[a-z]"), "_"));
323         assertEquals("ABC_123abc", RegExUtils.replaceFirst("ABCabc123abc", Pattern.compile("[^A-Z0-9]+"), "_"));
324         assertEquals("ABC123abc", RegExUtils.replaceFirst("ABCabc123abc", Pattern.compile("[^A-Z0-9]+"), ""));
325         assertEquals("Lorem_ipsum  dolor   sit", RegExUtils.replaceFirst("Lorem ipsum  dolor   sit", Pattern.compile("( +)([a-z]+)"), "_$2"));
326     }
327 
328     @Test
329     void testReplacePattern() {
330         assertNull(RegExUtils.replacePattern((CharSequence) null, "", ""));
331         assertEquals("any", RegExUtils.replacePattern((CharSequence) "any", (String) null, ""));
332         assertEquals("any", RegExUtils.replacePattern((CharSequence) "any", "", null));
333 
334         assertEquals("zzz", RegExUtils.replacePattern((CharSequence) "", "", "zzz"));
335         assertEquals("zzz", RegExUtils.replacePattern((CharSequence) "", ".*", "zzz"));
336         assertEquals("", RegExUtils.replacePattern((CharSequence) "", ".+", "zzz"));
337 
338         assertEquals("z", RegExUtils.replacePattern((CharSequence) "<__>\n<__>", "<.*>", "z"));
339         assertEquals("z", RegExUtils.replacePattern((CharSequence) "<__>\\n<__>", "<.*>", "z"));
340         assertEquals("X", RegExUtils.replacePattern((CharSequence) "<A>\nxy\n</A>", "<A>.*</A>", "X"));
341 
342         assertEquals("ABC___123", RegExUtils.replacePattern((CharSequence) "ABCabc123", "[a-z]", "_"));
343         assertEquals("ABC_123", RegExUtils.replacePattern((CharSequence) "ABCabc123", "[^A-Z0-9]+", "_"));
344         assertEquals("ABC123", RegExUtils.replacePattern((CharSequence) "ABCabc123", "[^A-Z0-9]+", ""));
345         assertEquals("Lorem_ipsum_dolor_sit", RegExUtils.replacePattern((CharSequence) "Lorem ipsum  dolor   sit", "( +)([a-z]+)", "_$2"));
346     }
347 
348     @Test
349     void testReplacePatternDeprecated() {
350         assertNull(RegExUtils.replacePattern(null, "", ""));
351         assertEquals("any", RegExUtils.replacePattern("any", (String) null, ""));
352         assertEquals("any", RegExUtils.replacePattern("any", "", null));
353 
354         assertEquals("zzz", RegExUtils.replacePattern("", "", "zzz"));
355         assertEquals("zzz", RegExUtils.replacePattern("", ".*", "zzz"));
356         assertEquals("", RegExUtils.replacePattern("", ".+", "zzz"));
357 
358         assertEquals("z", RegExUtils.replacePattern("<__>\n<__>", "<.*>", "z"));
359         assertEquals("z", RegExUtils.replacePattern("<__>\\n<__>", "<.*>", "z"));
360         assertEquals("X", RegExUtils.replacePattern("<A>\nxy\n</A>", "<A>.*</A>", "X"));
361 
362         assertEquals("ABC___123", RegExUtils.replacePattern("ABCabc123", "[a-z]", "_"));
363         assertEquals("ABC_123", RegExUtils.replacePattern("ABCabc123", "[^A-Z0-9]+", "_"));
364         assertEquals("ABC123", RegExUtils.replacePattern("ABCabc123", "[^A-Z0-9]+", ""));
365         assertEquals("Lorem_ipsum_dolor_sit", RegExUtils.replacePattern("Lorem ipsum  dolor   sit", "( +)([a-z]+)", "_$2"));
366     }
367 
368 }