Java/Regular Expressions/Replace
Версия от 18:01, 31 мая 2010; (обсуждение)
Содержание
Append Replacement Method
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String args[]) {
Pattern p = Pattern.rupile("test");
StringBuffer sb = new StringBuffer();
String candidateString = "This is a test.";
String replacement = "Test";
Matcher matcher = p.matcher(candidateString);
matcher.find();
matcher.appendReplacement(sb, replacement);
}
}
Escaping Special Characters in a Pattern
import java.util.regex.Pattern;
public class Main {
public static void main(String[] argv) throws Exception {
String patternStr = "i.e.";
boolean matchFound = Pattern.matches(patternStr, "i.e.");
matchFound = Pattern.matches(patternStr, "ibex");
// Quote the pattern; i.e. surround with \Q and \E
matchFound = Pattern.matches("\\Q" + patternStr + "\\E", "i.e.");
matchFound = Pattern.matches("\\Q" + patternStr + "\\E", "ibex");
// Escape the pattern
patternStr = escapeRE(patternStr);
matchFound = Pattern.matches(patternStr, "i.e.");
matchFound = Pattern.matches(patternStr, "ibex");
// Returns a pattern where all punctuation characters are escaped.
}
public static String escapeRE(String str) {
Pattern escaper = Pattern.rupile("([^a-zA-z0-9])");
return escaper.matcher(str).replaceAll("\\\\$1");
}
}
REGEX = "a*b"
/*
* Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceDemo2 {
private static String REGEX = "a*b";
private static String INPUT = "aabfooaabfooabfoob";
private static String REPLACE = "-";
public static void main(String[] args) {
Pattern p = Pattern.rupile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
INPUT = m.replaceAll(REPLACE);
System.out.println(INPUT);
}
}
Removing Line Termination Characters from a String
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static CharSequence removeLineTerminators(CharSequence inputStr) {
String patternStr = "(?m)$^|[\\r\\n]+\\z";
String replaceStr = " ";
Pattern pattern = Pattern.rupile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
return matcher.replaceAll(replaceStr);
}
}
ReplaceAll Method from Matcher
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String args[]) {
Pattern p = Pattern.rupile("(i|I)ce");
String candidateString = "ice Ice Ice.";
Matcher matcher = p.matcher(candidateString);
String tmp = matcher.replaceAll("Java");
System.out.println(tmp);
}
}
replaceFirst Method from Matcher
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String args[]) {
Pattern p = Pattern.rupile("(i|I)ce");
String candidateString = "ice Ice Ice.";
Matcher matcher = p.matcher(candidateString);
String tmp = matcher.replaceFirst("Java");
System.out.println(tmp);
}
}
Working with Back References
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String args[]) {
String regex = "(\\w)(\\d)(\\w+)";
Pattern pattern = Pattern.rupile(regex);
String candidate = "X99 ";
Matcher matcher = pattern.matcher(candidate);
String tmp = matcher.replaceAll("$33");
System.out.println("REPLACEMENT: " + tmp);
System.out.println("ORIGINAL: " + candidate);
}
}