您的位置:首页 > 编程语言 > Java开发

java 正则表达式学习

2014-06-27 10:47 218 查看
一、 Java正则表达式
程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂。 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

自从jdk1.4推出java.util.regex包,为我们提供了很好的J***A正则表达式应用平台。
二、 正则表达式
如果想知道有多少种正则表达式,则可以观察java.util.regex包中的Pattern类,里面列出了全部的正则表达式内容。
1.逻辑运算符:
|:管道符.如:x|y表示x或y
():捕获组.(abc)|(xyz)表示abc或xyz
2.边界匹配符:
^:从头匹配
$:从尾匹配
3.在正则表达式中具有特殊含义的字符
特殊字符

描述



.

表示任意一个字符



[abc]

表示a、b或c中的任意一个字符



[^abc]

除a、b和c以外的任意一个字符



[a-zA-z]

介于a到z,或A到Z中的任意一个字符



\s

空白符(空格、tab、换行、换页、回车)



\S

非空白符



\d

任意一个数字[0-9]



\D

任意一个非数字[^0-9]



\w

词字符[a-zA-Z_0-9]



\W

非词字符



4.表示字符出现次数的符号
表示次数的符号

描述



*

0 次或者多次



+

1 次或者多次



?

0 次或者 1 次



{n}

恰好 n 次



{n, m}

至少 n 次,不多于 m 次


三、 实例
1.字符串包含验证

//查找以Java开头,任意结尾的字符串

Pattern pattern = Pattern.compile("^Java.*");

Matcher matcher = pattern.matcher("Java是一门编程语言");

boolean b= matcher.matches();
//当条件满足时,将返回true,否则返回false

System.out.println(b);
2. 多条件分割字符串

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]);}
3.文字替换(首次出现字符)

Pattern pattern = Pattern.compile("正则表达式");

Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");

//替换第一个符合正则的数据

System.out.println(matcher.replaceFirst("Java"));
4.文字替换(全部)

Pattern pattern = Pattern.compile("正则表达式");

Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");

//替换第一个符合正则的数据

System.out.println(matcher.replaceAll("Java"));
5.文字替换(置换字符)

Pattern pattern = Pattern.compile(“正则表达式”);

Matcher matcher = pattern.matcher(“正则表达式 Hello World,正则表达式 Hello World ”);

StringBuffer sbr = new StringBuffer();

while (matcher.find()) {

matcher.appendReplacement(sbr, “Java”);

}
6.验证是否为邮箱地址

String email=“[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+”;

String str=”ceponline@yahoo.com.cn”;

Pattern pattern = Pattern.compile(email,Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher(str);

System.out.println(matcher.matches());
比较严格的:
email="^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\\w]*[0-9a-zA-Z])*\\.)+[a-zA-Z]{2,9})$"
7.网页时间提取
/**
*
*@Title:extractsDate
*@Description:提取网页时间
*@param inputStr:2013-07-0113:38:16、2013年06月30日22:50:50、2013年07月01日13:46
*/
publicstatic String extractsDate(String inputStr) {
String strDate = "";
Pattern p = Pattern
.compile("[0-9]{2,4}[年|\\-|/][0-9]{1,2}[月|\\-|/][0-9]{1,2}[日|\\s*][\\s*][0-9]{1,2}[:][0-9]{1,2}");
Pattern p2 = Pattern
.compile("[0-9]{2,4}[年|\\-|/][0-9]{1,2}[月|\\-|/][0-9]{1,2}[日|\\s?|][0-9]{1,2}[:][0-9]{1,2}");

Matcher m = p.matcher(inputStr);
if(m.find()) {
if (!"".equals(m.group())) {
String date = m.group();
date = date.replaceAll("年", "-");
date = date.replaceAll("月", "-");
date = date.replaceAll("日", "");
date = date.replaceAll("/", "-");
strDate = date;
}
}
else{
Matcher m2 = p2.matcher(inputStr);
while (m2.find()) {
if (!"".equals(m2.group())) {
String date = m2.group();
date = date.replaceAll("年", "-");
date = date.replaceAll("月", "-");
date = date.replaceAll("日", " ");
date = date.replaceAll("/", "-");
strDate = date;
}
}
}
return strDate;
}
8.网址提取
publicstaticvoid extractsURL2(String url2) throws IOException {
HttpURLConnection url=null;
String htmladdr="http://news.163.com/special/0001220O/news_json.js";
try {
URL url1 = new URL(htmladdr);
url = (HttpURLConnection)url1.openConnection ();
url.connect();
} catch (Exception e) {
e.printStackTrace();
return ;
}
String temp = null;
String temp2 = "";
if(url!=null){
InputStream stream;
stream = url.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
try {
while ((temp = reader.readLine()) != null){
temp2 += temp;
}
} catch (RuntimeException e) {
//e.printStackTrace();
}
reader.close();


}
String ruleUrl = "http://[a-z]+.163.com/yy/mmdd/[\\d]+/[\\w]+.html";
String urlFilter = urlFilterStrategy(ruleUrl);
Pattern p = Pattern
.compile(urlFilter);
Matcher m = p.matcher(temp2);
while (m.find()) {
if (!"".equals(m.group())) {
System.out.println(m.group());
}
}

}
publicstatic String urlFilterStrategy(String urlFilter) {
Calendar calendar = Calendar.getInstance();
String year = Integer.toString(calendar.get(calendar.YEAR))
.substring(2);
String year2 = Integer.toString(calendar.get(calendar.YEAR));
String month = "0" + Integer.toString(calendar.get(calendar.MONTH) + 1);
month = month.substring(month.length() - 2);
String day = "0"
+ Integer.toString(calendar.get(calendar.DAY_OF_MONTH));
day = day.substring(day.length() - 2);
urlFilter = urlFilter.replaceAll("yyyy-mm-dd", year2+"-"+month+"-"+day);
urlFilter = urlFilter.replaceAll("yyyy", year2);
urlFilter = urlFilter.replaceAll("yy", year);
urlFilter = urlFilter.replaceAll("mm", month);
urlFilter = urlFilter.replaceAll("dd", day);
return urlFilter;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: