正則表達式第四篇(Java中使用正則表達式)


1、常用

	// 以多條件分割字符串時:以逗號(,)或者號(|)來分隔字符串
	public static void fun2() {
		Pattern pattern = Pattern.compile("[,|]");
		String[] strs = pattern.split("Java Hello World  Java,Hello,   ,World|Sun");
		for (int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}

	}

	// 以多條件分割字符串時:以逗號(空格)(,)或者號(|)來分隔字符串
	public static void fun3() {
		Pattern pattern = Pattern.compile("[ ,|]");
		String[] strs = pattern.split("Java Hello  World  Java,Hello,   ,World|Sun");
		for (int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}
	}

	// 以多條件分割字符串時:以逗號(空格)(,)或者號(|)來分隔字符串
	public static void fun4() {
		Pattern pattern = Pattern.compile("[,|]+"); /* +表示分隔符可以連續出現算一次分隔 */
		String[] strs = pattern.split("Java Hello World  Java,Hello,,,,,,,,,World|Sun");
		for (int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}
	}

	// 文字替換(首次出現字符)
	public static void fun5() {
		Pattern pattern = Pattern.compile("正則表達式");
		Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
		// 替換第一個符合正則的數據
		System.out.println(matcher.replaceFirst("Java"));
	}

	// 文字替換(全部)
	public static void fun6() {
		Pattern pattern = Pattern.compile("正則表達式");
		Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
		// 替換第一個符合正則的數據
		System.out.println(matcher.replaceAll("88888888888888"));
	}

	// 文字替換(置換字符)
	public static void fun7() {
		Pattern pattern = Pattern.compile("正則表達式");
		Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World ");
		StringBuffer sbr = new StringBuffer();
		while (matcher.find()) {
			matcher.appendReplacement(sbr, "Java");
		}
		matcher.appendTail(sbr);
		System.out.println(sbr.toString());
	}

	// 去除html標記
	public static void fun8() {
		Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
		Matcher matcher = pattern.matcher("<a href=\"index.html\">主頁</a>");
		String string = matcher.replaceAll("");
		System.out.println(string);
	}

	// 查找html中對應條件字符串
	public static void fun9() {
		String str1 = "href=\"(.+?)\""; // .+?:表示1個以上任意字符並且可以出現多次。並且外面有""號。
		Pattern pattern = Pattern.compile(str1);
		Matcher matcher = pattern.matcher("<a href=\"index.html\">主頁</a>");
		if (matcher.find())
			System.out.println(matcher.group(1));
	}

	public static void main(String[] args) {
		fun2();
		System.out.println("2-------------------------------");
		fun3();
		System.out.println("3-------------------------------");
		fun4();
		System.out.println("4-------------------------------");
		fun5();
		System.out.println("5-------------------------------");
		fun6();
		System.out.println("6-------------------------------");
		fun7();
		System.out.println("7-------------------------------");
		fun8();
		System.out.println("8-------------------------------");
		fun9();
	}


2、替換指定{}中文字 
public class ReplacePath {

	public static String replace(final String sourceString, Object[] object) {
		String temp = sourceString;
		for (int i = 0; i < object.length; i++) {
			String[] result = (String[]) object[i];
			Pattern pattern = Pattern.compile(result[0]);
			Matcher matcher = pattern.matcher(temp);
			temp = matcher.replaceAll(result[1]);
		}
		return temp;
	}

	public static void main(String[] args) {
		String str = "Java目前的發展史是由{0}年-{1}年";
		String[][] object = { 
				new String[] { "\\{0\\}", "1995" },
				new String[] { "\\{1\\}", "2007" } 
		};
		System.out.println(replace(str, object));
	}
}


3、以正則條件查詢指定目錄下文件 

public class FilesAnalyze {
	private ArrayList<File> files = new ArrayList<File>(); // 用於承載文件路徑
	private String _path; // 用於承載未合併的正則公式
	private String _regexp;

	// 解析輸入流
	FilesAnalyze(String path, String regexp) {
		getFileName(path, regexp);
	}

	class MyFileFilter implements FileFilter {
		public boolean accept(File file) {// 匹配文件名稱
			try {
				Pattern pattern = Pattern.compile(_regexp);
				Matcher match = pattern.matcher(file.getName());
				return match.matches();
			} catch (Exception e) {
				return true;
			}
		}
	}

	// 分析文件名並加入files
	private void getFileName(String path, String regexp) { // 目錄
		_path = path;
		_regexp = regexp;
		File directory = new File(_path);
		File[] filesFile = directory.listFiles(new MyFileFilter());
		if (filesFile == null)
			return;

		for (int j = 0; j < filesFile.length; j++) {
			files.add(filesFile[j]);
		}

		return;
	}

	// 顯示輸出信息 
	public void print(PrintStream out) {
		Iterator<File> elements = files.iterator();
		while (elements.hasNext()) {
			File file = (File) elements.next();
			out.println(file.getPath());
		}
	}

	public static void output(String path, String regexp) {
		FilesAnalyze fileGroup1 = new FilesAnalyze(path, regexp);
		fileGroup1.print(System.out);
	}

	public static void main(String[] args) {
		output("C:\\新建文件夾\\", "[A-z|.]*"); // 是英文文件
	}
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章