---------- android培训java培训、期待与您交流! ----------

一、概述

  1、 概念:符合一定规则的表达式。

  2、 作用:用于专门操作字符串。

  3、 特点:用一些特定的符号来表示一些代码操作,这样可以简化书写。

  4、 好处:可以简化对字符串的复杂操作。

  5、 弊端:符合定义越多,正则越长,阅读性越差。

二、常见规则

  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-dm-p](并集))

    [a-z&&[def]]:d、e或 f(交集)

    [a-z&&[^bc]]:表示a到 z,除了 b和 c:[ad-z](减去)

    [a-z&&[^m-p]]:表示a到 z,而非 m到 p:[a-lq-z](减去)

  2、预定义字符

    . : 任何字符(与行结束符可能匹配也可能不匹配)

    \d:数字:[0-9]

    \D:非数字: [^0-9]

    \s:空白字符:[ \t\n\x0B\f\r]

    \S:非空白字符:[^\s]

    \w:单词字符:[a-zA-Z_0-9]

    \W:非单词字符:[^\w]

  3、边界匹配符

    ^:行的开头

    $ :行的结尾

    \b:单词边界

    \B:非单词边界

    \A:输入的开头

    \G:上一个匹配的结尾

    \Z:输入的结尾,仅用于最后的结束符(如果有的话)

    \z:输入的结尾

  4Greedy数量词

    X? :X出现一次或一次也没有

    X*:X出现零次或多次

    X+: X出现一次或多次

    X{n}:X恰好 n次

    X{n,}:X至少 n次

    X{n,m}X:至少 n次,但是不超过 m 次

  5、组和捕获

    捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))中,存在四个这样的组:

    1     ((A)(B(C)))

    2     \A

    3     (B(C))

    4     (C)

    组零始终代表整个表达式,在替换中常用$匹配组的内容。

三、正则表达式常见功能

  正则表达式常见功能,主要有四种:匹配、切割、替换和获取

  1、匹配

    String类中的boolean matches(String regex)方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

  2、切割

    String类中的String[] split(String regex)方法。

  3、替换

    String replaceAll(String regex , String replacement)方法。示例:

    String str = “zhangsantttxiaoqiangmmmzhan”

    str = str.replaceAll(“(.)\\” , );

  4、获取

    获取:是将字符串中符合规则的子串取出。

    操作步骤:

     (1)将正则表达式封装成对象。Pattern p = Pattern.compile(regex);

     (2)让正则对象和要操作的字符串相关联。Matcher m = p.matcher(str);

     (3)关联后,获取正则匹配引擎。

     (4)通过引擎对符合规则的子串进行操作,例如查找、取出。m.find()、m.group();

四、正则表达式应用练习

  练习1:字符串转换

 /* 需求:将下列字符串转成:我要学编程
"我我...我..我要...要...要要....学学....学学学......编编编...程...程程...." 思路:
将已有字符串变成另一个字符串。使用替换功能。
1、可以先将 . 去掉。
2、再将多个重复的内容变成单个内容。
*/
class ReplaceTest{
public static void main(String[] args){
String s = "我我...我..我要...要...要要....学学....学学学......编编编...程...程程....";
System.out.println(s); String regex = "\\.+";//先将 . 去掉
s = s.replaceAll(regex,"");//去掉 .
System.out.println(s); regex = "(.)\\1+";//将重复的内容变成单个内容
s = s.replaceAll(regex,"$1");//去重
System.out.println(s);
}
}

  练习2:将ip地址进行地址段顺序的排序。

 /* 需求:将ip地址进行地址段顺序的排序。
192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301 思路:
还按照字符串自然顺序,只要让他们每一段都是3位即可。
1、按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。
2、将每一段只保留3位。这样,所有的ip地址都是每一段3位。
*/
import java.util.*;
class IPSortTest{
public static void main(String[] args){
String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301";
System.out.println(ip); String regex = "(\\d+)";
ip = ip.replaceAll(regex,"00$1");//保证每段至少都有三位-------------
System.out.println(ip); regex = "0*(\\d{3})";
ip = ip.replaceAll(regex,"$1");//每段只保留三位
System.out.println(ip); regex = " ";
String[] arr = ip.split(regex);//按照空格切 //定义一个TreeSet集合,利用元素自然排序
TreeSet<String > ts = new TreeSet<String>();
for (String str : arr ){
ts.add(str);//添加
}
regex = "0*(\\d)";//把每段前面多余的0替换掉
for (String s : ts){
System.out.println(s.replaceAll(regex,"$1"));//把每段前面多余的0替换掉
}
}
}

  练习3:邮件地址校验

 //需求:对邮件地址进行校验。
class CheckMail{
public static void main(String[] args){
String mail = "123a809bc@sina.com.cn";
String regex = "\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";//较为精确
regex = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。
boolean b = mail.matches(regex);
System.out.println(b);
}
}

  练习4:网络爬虫

/* 网络爬虫
实际上是一个功能,用于搜集网络上的指定信息
需求:可用于收集邮箱,qq号等之类的信息。
*/
import java.net.*;
import java.util.regex.*;
import java.io.*;
class Spider{
public static void main(String[] args)throws Exception{
//getFileMail();
getWebMail();
}
//获取网页中mail
public static void getWebMail()throws Exception{
//封装网页地址
URL url = new URL("http://tieba.baidu.com/p/1390896758");
//连接服务器
URLConnection conn = url.openConnection();
//带缓冲区的网页读取流
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
//定义匹配邮件地址的正则表达式
String regex = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(regex);//封装正则表达式
//读取网页数据
while ((line = br.readLine())! = null){
//正则关联数据
Matcher m = p.matcher(line);
//寻找匹配邮箱
while (m.find()){
System.out.println(m.group());//输出匹配邮箱
}
}
} //获取指定文档中的邮件地址。使用获取功能。Pattern Matcher
public static void getFileMail()throws Exception{
//将文件封装成对象
File file = new File("E:\\Java Study\\Practice\\day25\\mail.txt");
//创建带缓冲区的读取流
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null; //定义正则表达式
String regex = "\\w+@[a-zA-Z]+(\\.[a-zA-z]+)+";
//创建Pattern对象,封装正则表达式
Pattern p = Pattern.compile(regex); //读取文件中数据
while ((line = br.readLine())! = null){
//关流字符串
Matcher m = p.matcher(line);
while (m.find())//寻找匹配的字符串{
System.out.println(m.group());//输出匹配的字符串
}
}
}
}

---------- android培训java培训、期待与您交流! ----------

黑马程序员——【Java基础】——正则表达式的更多相关文章

  1. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  2. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  3. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  4. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  5. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  6. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  7. 黑马程序员——JAVA基础之正则表达式,网络爬虫

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 正则表达式: 概念:用于操作字符串的符合一定规则的表达式 特点:用于一些特定的符号来表示一些代码 ...

  8. 黑马程序员——JAVA基础之简述设计模式

    ------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...

  9. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  10. 黑马程序员——JAVA基础之多线程的安全问题

    ------- android培训.java培训.期待与您交流! ---------- 导致多线程出现问题的一个特殊的状态:就绪.具备了执行资格,但是还没有获取资源. 导致安全问题的出现的原因: 1. ...

随机推荐

  1. IOS UIView 属性clipsToBounds

    当一个view上加了一个SubView 并且subview 的size超出了view的size那么默认超出部分也会显示出来,要想不显示出来设置 view的clipsToBounds属性设置成YES:即 ...

  2. map函数

    概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callback 原数组中的元素经 ...

  3. 再次熟悉jdbc连接mysql

    闲来无事想探究一下jdbc 1.首先准备工作.我们要下载jdbc驱动包mysql-connector-java-5.1.7-bin.jar.其他的暂时先不用,这个包的下载地址:http://pan.b ...

  4. aliyun的yum源(国内速度极快)

    公网(家里宽带下载速度达到1-3.5M): http://mirrors.aliyun.com/repo/Centos-6.repo 内网(购买的阿里云主机可以访问): http://mirrors. ...

  5. 什么是 HTML?

    前言 在 W3C(万维网联盟)官网里,有一套针对于初学者的 HTML 培训教程,为期四周.为了提升自己的翻译水平,同时帮助大家入门,我给大家翻译出来,以供参考. 1. 什么是 HTML HTML 是创 ...

  6. javascript 去掉空格之后的字符 正则表达式

    从后端数据库读取时间时,经常会把整个日期年月日包括时分秒都取到,如2015-1-28 14:56:00,但是一般的我们只需要前面的年月日就行了.一个简单的方法,直接用split(" &quo ...

  7. 19 Using Optimizer Hints

    19.1 Overview of Optimizer Hints A hint is an instruction to the optimizer. In a test or development ...

  8. jQuery实现两个按钮的位置互换

    页面上有2个按钮A和B.点击按钮A和按钮B互换位置 ,点击按钮B和按钮A互换位置.应该如何实现? html代码如下: <body> <!--页面上有2个按钮A和B. 点击按钮A和按钮 ...

  9. TCP短连接TIME_WAIT问题解决方法大全

    tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接 ...

  10. 浅谈Eclipse的更新、升级和MyEclipse插件的安装方法

    用的是如下图所示的eclipse标准版演示: 先谈下eclipse下安装MyEclipse插件的过程: 第一种方法:通过MyEclipse的存档进行离线更新 1,到MyEclipse官网进入下载页面, ...