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. 23.pyspider安装

    1.pip安装pip3 install pyspider 2.验证安装 pyspider all 3.打开浏览器 输入:127.0.0.1:5000(如下图)

  2. tomcat7的一些设置(修改内存)

    1.内存修改.今天在tomcat7下面部署了两个项目.居然报错了. 然后开始打开Tomcat7w.exe 在java标签中的initial memory pool和muxinum memory poo ...

  3. spark快速大数据分析

    从上层来看,每个Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作.驱动器程序包含应用的main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应 ...

  4. JS获取QueryString(Jquery)

    QueryString = {      data: {},      Initial: function() {          var aPairs, aTmp;          var qu ...

  5. Srping cloud Ribbon 自定义负载均衡

    IRule 默认提供有7种方式,使用轮询方式 如何自定义 1:主启动类加@RibbonClient @RibbonClient(name="微服务名", configuration ...

  6. Directshow 采集与FFDshow 冲突

    在使用Directshow 进行视频采集的时候,发现与本地安装的一个ffdshow有冲突. 见下图: 经过测试发现dshow 在设置采集媒体类型的时候,如果设置RGB32就会崩溃,如果设置RGB24就 ...

  7. mingw 搭建Emscripten 环境

    mingw 环境的搭建可以参考网上很多文章,不复杂.但在搭建Emscripten 环境之前需要配置git 和python 和MSbuild.exe 还需要安装camke 默认安装之后应该是添加了 系统 ...

  8. javascript _ajax 原理 初级

    1.1使用php 方式获取时间:写一个time.php文件,保存在test 文件夹中 <!DOCTYPE html> <html lang="en"> &l ...

  9. Linux命令:history

    显示历史(执行过的)命令. history [n] history -c history -d offset history -anrw [filename] history -p arg [arg ...

  10. 使用Docker搭建Tomcat运行环境

    1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: # uname -r 2 安装Do ...