📄 regexp.java
字号:
/**
* @(#)RegExp.java 2008-3-25 上午01:12:55
*/
package cn.ialvin.util;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式常用包装类
* @author Alvin(<b>ialvin.cn</b>) 广东 普宁 里湖
*/
public class RegExp {
Pattern p;
private String reg = "";
private boolean GLOBAL = false;
private int mode = 0;
/**
* 构造一个 Regex 对象
* @param reg 正则表达式
* @param md 表达式的匹配模式
*/
public RegExp(String reg, String md) {
if (reg != null)
this.reg = reg;
else
this.reg = "";
this.setMode(md);
}
/**
* 构造一个 Regex 对象
* @param reg 正则表达式
*/
public RegExp(String reg) { this(reg, null); }
/**
* 设置正则表达式的匹配模式
* @param md 匹配模式
*/
private void setMode(String md) {
if (md == null) md = "";
md = md.toLowerCase();
if (md.indexOf("i") != -1) {
this.mode = (this.mode | Pattern.CASE_INSENSITIVE);
}
if (md.indexOf("g") != -1) {
this.GLOBAL = true;
}
if (md.indexOf("m") != -1) {
this.mode = this.mode | Pattern.MULTILINE;
}
if (md.indexOf("s") != -1) {
this.mode = this.mode | Pattern.DOTALL;
}
if (md.indexOf("c") != -1) {
this.mode = this.mode | Pattern.COMMENTS;
}
p = Pattern.compile(this.reg, this.mode);
}
/**
* 测试本正则表达式能否匹配 src 字符串
* @param src 要测试的字符串对象
* @return boolean value
*/
public boolean test(String src) {
return p.matcher(src).find();
}
/**
* 测试源字串能否被正则完全匹配
* @param src 源字串
* @return 匹配结果
*/
public boolean match(String src) {
return p.matcher(src).matches();
}
/**
* 使用本对象对 src 进行匹配替换为 to. 如:
* <b><pre>
* Regex regex = new Regex("\\d+", "ig");
* String src = "abcde138ddef256asdf";
* String res = regex.replace(src, "[Number]");
* 结果: (true == res.equals("abcde[Number]ddef[Number]asdf"))
* </pre></b>
* @param src 源字符串内容
* @param to 将匹配到字符串段替换的内容
* @return String Object
*/
public String replace(String src, String to) {
if (src == null) return null;
if (to == null) to = "";
Matcher m = p.matcher(src);
if (this.GLOBAL)
return m.replaceAll(to);
return m.replaceFirst(to);
}
/**
* 相当于: <b>String result = (new Regex(reg, mode)).replace(src, to);</b>
* @param reg 正则表达式
* @param src 源字符串内容
* @param to 将匹配到字符串段替换的内容
* @param mode 正则表达式匹配模式
* @return String Object
*/
public static String replace(String reg, String src, String to, String mode) {
if (src == null) return null;
if (reg == null) return src;
if (to == null) to = "";
RegExp regex = new RegExp(reg);
if (mode != null) regex.setMode(mode);
return regex.replace(src, to);
}
/**
* 相当于 Regex.replace(reg, src, to, "g");
* @param reg 正则表达式
* @param src 源字符串内容
* @param to 将匹配到字符串段替换的内容
* @return String Object
*/
public static String replace(String reg, String src, String to) {
return RegExp.replace(reg, src, to, "g");
}
/**
* 例子: <b><pre>
* String src = "xxxxxxx5Add6xxxx721add3xxxx";
* Regex reg = new Regex("(\\d+)add(\\d+)", "ig");
* String result = reg.replace(src, new MatcheProcesser() {
* public String doProcess(Matcher m) {
* int i = Integer.parseInt(m.group(1)) + Integer.parseInt(m.group(2));
* return String.valueOf(i);
* }
* });
* result.equals("xxxxxxx11xxxx724xxxx")
* </pre></b>
* @param src 源字串
* @param mp 匹配组处理器
* @return 替换结果
*/
public String replace(String src, MatcheProcesser mp) {
StringBuffer sb = new StringBuffer();
Matcher m = this.p.matcher(src);
m.find();
m.reset();
boolean result = m.find();
if (result) {
m.appendReplacement(sb, RegExp.decode(mp.doProcess(m)));
result = m.find();
}
if (this.GLOBAL) {
while(result) {
m.appendReplacement(sb, RegExp.decode(mp.doProcess(m)));
result = m.find();
}
}
m.appendTail(sb);
return sb.toString();
}
private static String decode(String src) {
return src.replaceAll("\\\\", "\\\\\\\\").replaceAll("\\$", "\\\\\\$");
}
public static void main(String[] args) {
String src = "xxxxxxx5Add6xxxx721add3xxxx";
RegExp reg = new RegExp("(\\d+)(?:add)(\\d+)", "ig");
src = reg.replace(src, new MatcheProcesser() {
public String doProcess(Matcher m) {
int i = Integer.parseInt(m.group(1)) + Integer.parseInt(m.group(2));
return String.valueOf(i);
}
});
System.out.println(src);
if (true) return;
src = "FFWindowsXPWindowsME";
src = src.replaceAll("(?<!XP)Windows", "A");
System.out.println(src);
Properties ps = System.getProperties();
Set ks = ps.keySet();
Iterator iterator = ks.iterator();
for (;iterator.hasNext();) {
Object o = iterator.next();
System.out.println(o + ":");
System.out.println(" \"" + System.getProperty(o.toString()) + "\"");
}
System.out.println(System.getProperty("java.vm.info"));
System.out.println(System.getProperty("java.compiler"));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -