1. 程式人生 > >匹配文字中的網址java正則表示式

匹配文字中的網址java正則表示式

司有個業務需要匹配文字中的網址,度娘,谷哥了半天經常看到有對html中獲取超連結的正則,只要匹配<a href=['"]?(.*?)['"]?即可,但如果是普通文字型別的則比較費事些,分享下最後的表示式:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class URLMatcher {
	public static void main(String[] args) {
		Pattern pattern = Pattern
				.compile("(http://|ftp://|https://|www){0,1}[^\u4e00-\u9fa5\\s]*?\\.(com|net|cn|me|tw|fr)[^\u4e00-\u9fa5\\s]*");
		// 空格結束
		Matcher matcher = pattern
				.matcher("隨碟附送下載地址http://www.zuidaima.com/sdfsdf.htm?aaaa=%ee%sss ?sdfsyyy空格結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

		// 中文結束
		matcher = pattern
				.matcher("隨碟附送下載地址http://www.zuidaima.com/sdfsdf.htm?aaaa=%ee%sss網址結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

		// 沒有http://開頭
		matcher = pattern
				.matcher("隨碟附送下載地址www.zuidaima.com/sdfsdf.htm?aaaa=%ee%sss網址結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

		// net域名
		matcher = pattern
				.matcher("隨碟附送下載地址www.xxx.net/sdfsdf.htm?aaaa=%ee%sss網址結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

		// xxx域名
		matcher = pattern
				.matcher("隨碟附送下載地址www.zuidaima.xxx/sdfsdf.htm?aaaa=%ee%sss網址結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

		// yyyy域名匹配不到
		System.out.println("匹配不到yyyy域名");
		matcher = pattern
				.matcher("隨碟附送下載地址www.zuidaima.yyyy/sdfsdf.html?aaaa=%ee%sss網址結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

		// 沒有http://www.
		matcher = pattern
				.matcher("隨碟附送下載地址zuidaima.com/sdfsdf.html?aaaa=%ee%sss網址結束");
		while (matcher.find()) {
			System.out.println(matcher.group(0));
		}

	}
}


結果是死的,但思路是活的,大家可以根據自己的業務隨意改寫表示式。

有圖有真相:

轉載請註明出處。