package com.regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Test { public static void main(String[] args) {
//正则表达式
//一个 "." 代表一个任意字符 p("abc".matches("..."));
//"\d"代表一个数字, \D相当于不是数字, 对\d取反
p("as897as98fsg6dfg9sddf".replaceAll("\\d", "_"));
//Pattern可以编译正则表达式的一个模式
Pattern p = Pattern.compile("[a-z]{3}");
Matcher m = p.matcher("erf");
p(m.matches());//matches()方法永远是匹配整个字符串
//以上三行代码相当于下面这一句, 但是上面三句性能比较高
//{n}, 一定出现n次
//{n,}, 至少出现n次, 最多不限
//{n,m}, 至少出现n次, 不超过m次
p("qqq".matches("[a-z]{3}")); //初步认识".", "*", "+", "?" MataData(源数据)
p("a".matches("."));//一个任意字符
p("aa".matches("aa"));
p("aaaa".matches("a*"));//0个或多个
p("aaaa".matches("a+"));//1个或多个
p("aaaa".matches("a?"));//1个或不存在
p("".matches("a?"));//零宽度匹配
p("a".matches("a?"));
p("45913549872168435".matches("\\d{3,10}"));
p("192.168.0.222".matches("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}"));
p("192".matches("[0-2][0-9][0-9]")); //范围
p("a".matches("[abc]"));//[]指的是匹配一个字符, 不管写多长
p("l".matches("[^abc]"));//"^"除了abc其他都可以匹配
p("a".matches("[a-zA-Z]"));//"-"代表的是从哪个范围到哪个范围(这个的意思是小写字母或者是大写字母)
p("a".matches("[a-z]|[A-Z]"));//同上
p("a".matches("[a-z[A-Z]]"));//同上
p("R".matches("[A-Z&&[RFG]]"));//同事满足两个范围 //认识\d \s \\u \
p(" \n\t\r".matches("\\s{4}"));//"\s"是空白字符, 比如空格, 换行符, 制表符等
p("发".matches("\\S{1,8}"));//"\S"是对"\s"的取反
p("a_8".matches("\\w{3}"));//"\w"指的可以用作命名的字符:大小写字母下划线+数字
p("abc807$%".matches("[a-z]{1,3}\\d+[&^%$]+"));
p("\\".matches("\\\\")); //边界匹配器
p("hello sir".matches("^h.*"));//"^"在"[]"外面的时候代表的是一行的开始
p("hello sir".matches(".*ir$"));//"$"放在最后代表的是一行的结束
p("hello#sir".matches("^h[a-z]{3}o\\b.*"));//"\b"单词边界可以包括那些空白字符或者"\W"等
p("hellosir".matches("^h[a-z]{3}o\\b.*")); //过滤空白行("*"是用来修饰"^[\\s&&[^\\n]")
p(" \t \n".matches("^[\\s&&[^\\n]]*\\n$")); //Email地址
p("sdtght-@ryhrtbrebgr.com".matches("[\\w[.-]]+@[\\w[.-]]+.[\\w]+")); //matches.find()方法是查找字符串中符合正则表达式的子字符串
//正则表达式的搜索引擎需要注意的一点
Pattern p1 = Pattern.compile("\\d{3,5}");
String s = "123-4567-8912-12345-ac";
p("字符串的总长度: "+s.length());
Matcher m1 = p1.matcher(s);
p(m1.matches());
//当执行完上面一行代码, 正则表达式引擎已经将String s匹配完了, 后面的几个find()方法是从"4567..."开始找的
//也就是说find()方法和matches()是相互影响的
m1.reset();//调用reset()方法可以解决find和matches相互影响
p(m1.find());
p(m1.start()+"----------"+m1.end());
p(m1.find());
p(m1.start()+"----------"+m1.end());
p(m1.find());
p(m1.start()+"----------"+m1.end());
p(m1.find());
p(m1.start()+"----------"+m1.end());
p(m1.find());
//如果想要输出找到的子字符串的位置, 前提是必须要能找到, 否则再执行下面这行代码就会报错 !
p(m1.start()+"----------"+m1.end()); //lookingAt()方法是从整个字符串的开始位置去查找
p(m1.lookingAt());
p(m1.lookingAt());
p(m1.lookingAt());
p(m1.lookingAt()); //简单做个练习, 找出所有的网址
String news = "民生在勤,勤则不匮www.baidu.com——习大大曾用2000多年前《左传》中的古语阐www.sina.com.cn释最朴实的道理。"
+ "2013spring.io年4月28日,"
+ "习大大在全国总工会机关同全国www.qq.com劳动模范代表座谈时强调,"
+ "必须牢固树立www.hanqi.net劳动最光荣、劳动最崇高、劳动最伟大、劳动最美丽的观念,崇尚劳动,造福劳动者,"
+ "让全体人民进一步焕发劳动热情、释放创造news.ifeng.com潜能,通过劳动创造更加美好的生活。"; System.out.println(news); Pattern p2 = Pattern.compile("[[a-z][.]]+[\\w]+");
Matcher m2 = p2.matcher(news);
while(m2.find()) {
//p(news.substring(m2.start(), m2.end()));
p(m2.group());
} //字符串的替换
//Pattern.CASE_INSENSITIVE(Pattern里面的一个常量, 忽略大小写)
Pattern p3 = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
String s1 = "java Java jaVA JAVA jaVa i like jAva qwert";
Matcher m3 = p3.matcher(s1);
int b=0;
StringBuffer buf = new StringBuffer();
while(m3.find()) {
//replaceAll直接返回已经替换的整个字符串
//p(m.replaceAll("java"));
b++;
//如果要把偶数位的java替换成小写, 奇数位的替换成大写
if(b%2==0) {
m3.appendReplacement(buf, "java");
} else {
m3.appendReplacement(buf, "JAVA");
}
}
m.appendTail(buf);
p(buf.toString()); //正则表达式的分组
//应用: 在下面的例子中, 如果想取出每一个匹配的字符串之后, 还想取出只是数字的字符串
// 可以使用分组, 分组规则, 从左往右数第几个"(", 就是第几个分组
Pattern p4 = Pattern.compile("((\\d{3,5})([a-z]{2}))");
String s2 = "123av-4567aa-8912qq-12345vv-ac";
Matcher m4 = p4.matcher(s2);
while(m4.find()) {
p(m4.group(3));
}
} public static void p(Object o) {
System.out.println(o);
}
}

统计一个页面上有多少Email地址

package com.regexp;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class EmailSpider { public static void main(String[] args) {
File f = new File("E:\\workspace\\regexp\\htmlfiles\\1.html");
String line = "";
if(f.exists()) {
try {
FileReader fr = new FileReader(f.getPath());
BufferedReader br = new BufferedReader(fr);
Pattern p = Pattern.compile("[[\\w][-]]+@[[\\w][-.]]+\\.[\\w]+");
while((line = br.readLine())!=null) {
Matcher m = p.matcher(line);
if(m.find()) {
System.out.println(m.group());
}
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
}

统计代码行数

package com.regexp;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; public class CodeCounter { static long normalLines = 0;//代码行
static long commentsLines = 0;//注释行
static long whiteLines = 0;//空行 public static void main(String[] args) {
File f = new File("E:\\workspace\\CustomManager\\src\\com\\dao\\impl");
File[] codeFiles = f.listFiles();
for(File child : codeFiles) {
if(child.getName().matches(".*\\.java$")) {
parse(child);
}
}
System.out.println("代码行数: "+normalLines);
System.out.println("注释行数: "+commentsLines);
System.out.println("空行数: "+whiteLines);
} private static void parse(File f) {
BufferedReader br = null;
boolean comment = false;
try {
br = new BufferedReader(new FileReader(f));
String line = "";
while((line=br.readLine())!=null) {
line = line.trim();
if(line.matches("^[\\s&&[^\\n]]*")) {
whiteLines++;
} else if((line.startsWith("/*")&&line.endsWith("*/"))||line.startsWith("//")) {
commentsLines++;
} else if(line.startsWith("/*")) {
comment = true;
commentsLines++;
} else if(true == comment) {
commentsLines++;
if(line.endsWith("*/")) {
comment = false;
}
} else {
normalLines++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
br = null;
}
}
}
}

java使用正则表达式的更多相关文章

  1. java中正则表达式基本用法

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  2. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  3. Java的正则表达式

    package RegexTest; /** * Created by hu on 2016/3/29. */ /* * Java的正则表达式 在正则表达式中,用\d表示一位数字,如果在其它语言中使用 ...

  4. Java与正则表达式

    Java与正则表达式 标签: Java基础 正则 正如正则的名字所显示的是描述了一个规则, 通过这个规则去匹配字符串. 学习正则就是学习正则表达式的语法规则 正则语法 普通字符 字母, 数字, 汉字, ...

  5. Java中正则表达式去除html标签

    Java中正则表达式去除html的标签,主要目的更精确的显示内容,比如前一段时间在做类似于博客中发布文章功能,当编辑器中输入内容后会将样式标签也传入后台并且保存数据库,但是在显示摘要的时候,比如显示正 ...

  6. Java面向对象 正则表达式

     Java面向对象 正则表达式 知识概要:                (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...

  7. Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码正则表达式

    Java 常用正则表达式,Java正则表达式,Java身份证校验,最新手机号码校验正则表达式 ============================== ©Copyright 蕃薯耀 2017年11 ...

  8. JAVA中正则表达式常用的四个方法

    JAVA中正则表达式处理字符串的四个常用方法:匹配.分割.替换.截取.其跟字符串的常用函数相似,但是使用正则表达式会更简单.更加简洁.下面是具体的例子: public class TestRegex ...

  9. Java对正则表达式的支持(一)

    Java对正则表达式的支持主要体现在String.Pattern.Matcher和Scanner类. 1.Pattern.Matcher 先看一个Pattern和Matcher类使用正则表达式的例子. ...

  10. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

随机推荐

  1. 学习笔记:ES6

    http://es6.ruanyifeng.com/ ECMAScript 6 https://frankfang.github.io/es-6-tutorials/ ES 6 新特性列表 2017- ...

  2. Http协议基础知识

    r equest POST https://re.csdn.net/csdnbi HTTP/1.1方法 url/uri 协议的版本号 1.1Host: re.csdn.netConnection: k ...

  3. c# word操作

    合并单元格  http://www.360doc.com/content/11/0729/21/2097544_136620405.shtml

  4. hadoop的client搭建-即集群外主机访问hadoop

    1增加主机映射(与namenode的映射一样): 增加最后一行  [root@localhost ~]# su - root1 [root@localhost ~]# vi /etc/hosts 12 ...

  5. C#串口传输中文字符

    发送:  Encoding gb = System.Text.Encoding.GetEncoding("gb2312");  byte[] bytes = gb.GetBytes ...

  6. oracle的备份与恢复

    转自:https://blog.csdn.net/kepa520/article/details/78958029 dba的职责: 1.安装和升级oracle数据库 2.建库.表空间.表.视图.索引. ...

  7. sql 2014 安装失败

    SQL Server setup failed to modify security permissions on 原因是 上述目录中没有权限,浏览此文件夹试试,有 错误,删除文件夹,无权删除,通过右 ...

  8. window(win7)下安装ubuntu14.04lts (desktop)系统

    一.前期准备 1.大于2G的U盘一个(我的系统盘制作完成后大约占1个多G的容量) 2.已下载好的Ubuntu安装文件(选择在官网下载,有32和64位选择) 3.已安装好UltraISO软件的电脑(Ul ...

  9. TWebBrowser控件彻底防止弹出新窗口

    最近在编写一个使用到TWebBrowser控件的软件,浏览网页时经常会弹出各种各样的窗口,尤其是广告,让人烦不胜烦,参考网上的一些资料,针对不同的弹窗方式采取相应的措施就能禁止各种弹窗. 1. 将TW ...

  10. SignalR快速入门

    本篇是SignalR系列教程的第一篇,本篇内容介绍了如何创建SignalR应用,如何利用SignalR搭建简易的聊天室等,本篇内容参考自:http://www.asp.net/signalr/over ...