⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regexp.java

📁 又一个课程设计 简易 JSP 论坛 功能较简单的那种, 界面上模仿了 Discuz JSP 本来就学的不行, 只是尽量实现了 MVC
💻 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 + -