Java/Regular Expressions/Replace

Материал из Java эксперт
Версия от 06:01, 1 июня 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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);
  }
}