/**
* JAVA中的正则表达式
*/
package test.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
/**
*
* @param args
*/
public static void main(String[] args) {
System.out.println("1———");
RegexExample.getNameFormPath();
System.out.println();
System.out.println("2———");
RegexExample.printPostNo();
System.out.println();
System.out.println("3———");
RegexExample.getMonthFormText();
System.out.println();
System.out.println("4———");
RegexExample.replaceString();
System.out.println();
System.out.println("5———");
RegexExample.printIdCord();
System.out.println();
System.out.println("6———");
RegexExample.getChcn();
System.out.println();
System.out.println("7———");
RegexExample.getEmail();
System.out.println();
System.out.println("8———");
RegexExample.extractURL();
}
/**
*
* 从文件路径中提取文件名,含后缀
*
*
*
* 正则表达式中 "."表示匹配仍何单个字符
*
* ".+"表示匹配任何一个个或多个字符
*
* ".+/(.+)$"表示以任意字符开始,任意字符结尾,中间包含"/"
*
* "()"代表分组操作
*
* Matcher类的group的索引值以1开始
*/
public static void getNameFormPath() {
System.out.println("从文件路径中提取文件名,含后缀———–Start————");
// 定义字符串路径
String path = "c:/dir/dir2/name.txt";
System.out.println(path);
// 定义正则表达式, 以任何字符开头,仍和字符结尾,中间用"/"分隔的字符串,对最有一个/分隔出的字符串分组
String regEx = ".+/(.+)$";
// 得到正则表达式模型对象
Pattern p = Pattern.compile(regEx);
// 得到匹配结果对象
Matcher m = p.matcher(path);
// 如果不存在匹配
if (!m.find())
System.out.println("文件路径格式错误!");
else
// 打印正则表达式中定义分组中的第一个
System.out.println(m.group(1));
System.out.println("从文件路径中提取文件名,含后缀———–Start————");
}
/**
*
* 邮政编码的正则表达式
*
*
*
* [0-9]{6}表示0到9直接的数字任意6个
*
* \d与[0-9]意思相同,\d在JAVA字符串中转义之前为"\\d"
*/
public static void printPostNo() {
System.out.println("邮政编码的正则表达式———–Start————");
String a = "200100";
System.out.println(a);
System.out.println(Pattern.matches("\\d{6}", a));
String b = "as6554";
System.out.println(b);
System.out.println(Pattern.matches("[0-9]{6}", b));
System.out.println("邮政编码的正则表达式————End————-");
}
/**
*
* 从字符串"June 26, 1951″中提取出月份
*
*
*
* \\s表示换行指标空格等空白字符
*/
public static void getMonthFormText() {
System.out.println("从字符串\"June 26, 1951\"中提取出月份———–Start————");
String strdate = "June 26, 1951";
System.out.println(strdate);
String regEx = "([a-zA-Z]+)\\s+[0-9]{1,2},\\s*[0-9]{4}";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(strdate);
if (!m.find())
System.out.println("日期格式错误!");
else
System.out.println(m.group(1));
System.out.println("从字符串\"June 26, 1951\"中提取出月份————End————-");
}
/**
*
* 把字符串中所有一个或多个a的地方都替换成A, 如 aaaa -> A
*/
public static void replaceString() {
System.out.println("把字符串中所有一个或多个a的地方都替换成A———–Start————");
String str = "okaaaaa Let meaaaaseeaa aa ! aohaa myaa godaa !a";
System.out.println(str);
String regEx = "a+";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
String s = m.replaceAll("A");
// Easy AdSense by Unreal
System.out.println(s);
System.out.println("把字符串中所有一个或多个a的地方都替换成A————End————-");
}
/**
*
* 验证身份证号码
*/
public static void printIdCord() {
System.out.println("验证身份证号码———–Start————");
String id = "429006198203070318";
System.out.println(Pattern.matches("\\d{15}|\\d{18}", id));
System.out.println(Pattern.matches("[0-9]{18}|[0-9]{15}", id));
System.out.println("验证身份证号码————End————-");
}
/**
*
* 中文提取 不包含中文标点
* [\\u4E00-\\u9FFF]+ (不包含中文标点)
*/
public static void getChcn() {
System.out.println("中文提取———–Start————");
String str = "welcome to china, 肖曲来, yes, 谢 谢;";
System.out.println(str);
Pattern p = Pattern.compile("[\\u4E00-\\u9FFF]+");
Matcher m = p.matcher(str);
String s = "";
while (m.find()) {
s = s + m.group();
}
System.out.println(s);
System.out.println("中文提取————End————-");
}
/**
*
* 验证Email地址
* \\w 等价于 [a-zA-Z0-9_]
*/
public static void getEmail() {
System.out.println("验证Email地址———–Start————");
String email = "asdf@asd.com";
System.out.println(email);
String regEx = "\\w+@\\w+\\.\\w+";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(email);
if (m.matches())
System.out.println("合法的Email");
else
System.out.println("不合法的Email");
email = "ad_sdf@___.___";
System.out.println(email);
m = p.matcher(email);
if (m.matches())
System.out.println("合法的Email");
else
System.out.println("不合法的Email");
System.out.println("验证Email地址———–Start————");
}
/**
*
* 解析URL
*
* [^#] 表示不能包含"#"
*/
public static void extractURL() {
RegexExample.URLInfo urlInfo = new RegexExample().new URLInfo();
String strUrl = "ftp://www.ftp.com/incoming/movie.rm";
System.out.println(strUrl);
String regEx = "([a-zA-Z]+)://([a-zA-Z0-9]+[\\w-\\.]+[a-zA-Z0-9]+)(:\\d{2,5}){0,1}/([^#]*)";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(strUrl);
if (m.find()) {
urlInfo.protocal = m.group(1);
urlInfo.host = m.group(2);
urlInfo.port = m.group(3);
urlInfo.path = m.group(4);
}
System.out.println("protocal=" + urlInfo.protocal);
System.out.println("host=" + urlInfo.host);
System.out.println("port=" + urlInfo.port);
System.out.println("path=" + urlInfo.path);
String strUrl2 = "http://www.sina.com.cn:8080/asdf/aasdf.jsp?proc=aid";
System.out.println(strUrl2);
m = p.matcher(strUrl2);
if (m.find()) {
urlInfo.protocal = m.group(1);
urlInfo.host = m.group(2);
urlInfo.port = m.group(3);
urlInfo.path = m.group(4);
}
System.out.println("protocal=" + urlInfo.protocal);
System.out.println("host=" + urlInfo.host);
System.out.println("port=" + urlInfo.port);
System.out.println("path=" + urlInfo.path);
}
class URLInfo {
private String protocal;
private String path;
private String host;
private String port;
}
/**
*
* UBB代码 翻译
*/
public static void txUBB() {
}
}