java 正则表达式学习
一、 Java正则表达式
在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂。 因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
自从jdk1.4推出java.util.regex包,为我们提供了很好的JAVA正则表达式应用平台。
二、 正则表达式
如果想知道有多少种正则表达式,则可以观察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:提取网页时间
日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;
}
java 正则表达式学习的更多相关文章
- java正则表达式学习笔记
Java 正则表达式语法 为了更有效的使用正则表达式,需要了解正则表达式语法.正则表达式语法很复杂,可以写出非常高级的表达式.只有通过大量的练习才能掌握这些语法规则. 本篇文字,我们将通过例子了解正则 ...
- Java 正则表达式学习总结和一些小例子
从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.r ...
- java正则表达式学习
1.简单认识正则: public class Test { public static void main(String[] args) { //简单认识正则 p("abc".ma ...
- Java正则表达式学习与记录
转载自:http://www.runoob.com/java/java-regular-expressions.html 正则表达式定义了字符串的模式,用于搜索.编辑或处理文本. 1.正则表达式中字符 ...
- java正则表达式基础知识(转)
1基础 2.1 简单字符类 构造 描述 [abc] a,b或c [^abc] 除a,b或c外的字符 [a-zA-Z] a至z 或 A至Z [a-d[m-p]] a至d 或 m至p [a-z&& ...
- 正则表达式学习笔记(附:Java版示例代码)
具体学习推荐:正则表达式30分钟入门教程 . 除换行符以外的任意字符\w word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s space,空白符 ...
- Java基础学习总结(35)——Java正则表达式详解
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu ...
- Java 正则表达式[转载]
PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...
- Java正则表达式的应用
在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...
随机推荐
- Windows Server 2012 R2 设置 smtp 服务器
Windows Server 2012/2012 R2:安装和配置 SMTP 服务器 安装 SMTP 服务器 以下是安装 SMTP 服务器功能的步骤: 打开“服务器管理器”:单击键盘上的 Window ...
- iOS 复选框风格转换 Switchery 开关效果
Switchery 是个简单的 JavaScript 组件,只要几个简单的步骤就可以帮助用户把默认的 HTML 复选框转换成漂亮 iOS 7 样式风格.用户可以很方便的自定义这种转换,所以可以很好的配 ...
- nginx 负载均衡相关知识
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...
- 容器的范围 .xml
pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...
- Floyd算法解决最短路径问题
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,A和B在吃过中饭之后,来到了一个新的鬼屋!鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些 ...
- 浅谈“be practical and realistic”
一 “实事求是”这个词,一般认为是古人的一种治学观念,后来经咏芝的发明.阐释.以及“应用”,成为“基本思想路线”(具体可参看大学思想政治教科书),被称为“活的灵魂”.这里不想过多地牵扯政治话题,仅就我 ...
- CentOS下安装gns3
1.安装支持环境 sudo yum intall PyQt4 telnet 2.安装抓包用的wireshark sudo yum install wireshark wireshark-gnome 3 ...
- signal()函数
转自:http://blog.csdn.net/sddzycnqjn/article/details/7285760 1. 信号概念 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件) ...
- 一起刷LeetCode5-Longest Palindromic Substring
发现自己原来掌握的一下算法,都忘掉了,啊啊啊 ----------------------------------------------------------------------------- ...
- R语言简单入门
一.运行R语言可以做哪些事? 1.探索性数据分析(将数据绘制图表) 2.统计推断(根据数据进行预测) 3.回归分析(对数据进行拟合分析) 4.机器学习(对数据集进行训练和预测) 5.数据产品开发 二. ...