一、 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 正则表达式学习的更多相关文章

  1. java正则表达式学习笔记

    Java 正则表达式语法 为了更有效的使用正则表达式,需要了解正则表达式语法.正则表达式语法很复杂,可以写出非常高级的表达式.只有通过大量的练习才能掌握这些语法规则. 本篇文字,我们将通过例子了解正则 ...

  2. Java 正则表达式学习总结和一些小例子

    从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.r ...

  3. java正则表达式学习

    1.简单认识正则: public class Test { public static void main(String[] args) { //简单认识正则 p("abc".ma ...

  4. Java正则表达式学习与记录

    转载自:http://www.runoob.com/java/java-regular-expressions.html 正则表达式定义了字符串的模式,用于搜索.编辑或处理文本. 1.正则表达式中字符 ...

  5. 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&& ...

  6. 正则表达式学习笔记(附:Java版示例代码)

    具体学习推荐:正则表达式30分钟入门教程 .         除换行符以外的任意字符\w      word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s        space,空白符 ...

  7. Java基础学习总结(35)——Java正则表达式详解

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu  ...

  8. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  9. Java正则表达式的应用

    在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...

随机推荐

  1. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  2. JSTL(fn函数)

    JSTL(fn函数) 首先,我们要在页面的最上方引用: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/js ...

  3. oracle收集

    1. 高级sql学习——with子句 http://blog.chinaunix.net/uid-10697776-id-2935678.html 2.java List 排序 Collections ...

  4. 2016年JavaScript技术栈展望

    如果你正在筹划新的前端项目或者重构现有项目,那么你需要认识到现在的前端开发环境已经今非昔比,这其中有太多的选择了:React.Flux.Angular.Aurelia.Mocha.Jasmine.Ba ...

  5. 中文+django1.9+python3.5一些注意点

    1.模板html文件里一定要加 <!DOCTYPE html><meta http-equiv="Content-type" content="text ...

  6. jquery checkbox勾选取消勾选的诡异问题

    jquery checkbox勾选/取消勾选的诡异问题jquery checkbox勾选/取消勾选的诡异问题 <form>        你爱好的运动是?<input type=&q ...

  7. 求职基础复习之冒泡排序c++版

    代码中在第一层循环中增加一个bool值,是为了防止在排序完成后还继续无谓的比较,最多会有(n-1)*(n-2)/2次循环. #include<iostream> using namespa ...

  8. ps做gif 登陆下拉菜单效果

    作者这里仅介绍登录动画的制作思路和简单过程.一些细节的制作,如登录框,每一帧的图像等都需要自己根据参考图慢慢完成.最终效果 1.新建大小适当的文件,背景填充暗蓝色.首先设计一个底座,主要用图层样式来完 ...

  9. phpcms学习总结

    文件目录结构 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – phpcms phpc ...

  10. Android学习笔记-Dialog详解

    1.对话框的使用 1.1AlertDialog的显示 简单对话框以及监听的设置:重点掌握三个按钮(也就是三上单词): PositiveButton(确认按钮);NeutralButton(忽略按钮) ...