Java基础七-正则表达式

一、定义:

特定的符号的组合

二、作用:

用于操作字符串数据

三、优缺点

简化代码,但是阅读性差

四、引入

4.1 问题

判断一个号码是否是QQ号?

不是零开头

6-15位

只含有数字

4.2 代码

         int len = qq.length();

         if(len>=5 && len<=15){

             if(!qq.startsWith("0")){
try {
long l = Long.parseLong(qq); System.out.println(l+":正确");
}catch(NumberFormatException e){
System.out.println(qq+":含有非法字符");
} }else{
System.out.println(qq+":不能0开头");
}
}else{
System.out.println(qq+":长度错误");
}
}

4.3 要点

if(!qq.startsWith("0"))

判断不是零开头

long l = Long.parseLong(qq);

判断全是数字

五、正则表达式解决引入

5.1 代码

String regex = "[1-9][0-9]{4,14}";//正则表达式。

boolean b = qq.matches(regex);

System.out.println(qq+":"+b);

5.2 说明

String regex = "[1-9][0-9]{4,14}";

第一位[1-9]

第二位[0-9]

后面[0-9]{4,14}重复4-14次

中括号表示取值,大括号表示次数,小括号表示组

六、正则表达式的构造摘要

java.util.regex

类 Pattern中

七、正则表达式的构造摘要简介

7.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](减去)

7.2 字符

x 字符 x

\\ 反斜线字符

7.3 预定义字符类

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

\d 数字:[0-9]

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

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

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

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

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

7.4 Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

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

7.5 边界匹配器

^ 行的开头

$ 行的结尾

\b 单词边界

\B 非单词边界

\A 输入的开头

\G 上一个匹配的结尾

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

\z 输入的结尾

八、正则表达式对字符的常见操作

* 正则表达式对字符串的常见操作:

* 1, 匹配。

*             其实使用的就是String类中的matches方法。

*

* 2,切割。

*             其实使用的就是String类中的split方法。

*

* 3,替换。

*             其实使用的就是String类中的replaceAll()方法。

*

* 4,获取。

* 将正则规则进行对象的封装。
* Pattern p = Pattern.compile("a*b");
* //通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher .
* Matcher m = p.matcher("aaaaab");
* //通过Matcher匹配器对象的方法对字符串进行操作。
* boolean b = m.matches();

8.1 匹配

//匹配手机号码是否正确。

String tel = "15800001111";

String regex = "1[358]\\d{9}";

boolean b = tel.matches(regex);

System.out.println(tel+":"+b);

8.2 切割

将字符串中的人名分割开

String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";

String[] names = str.split("(.)\\1+");//str.split("\\.");

for(String name : names){

System.out.println(name);

}

小括号是组,(.)是第一组,\\1是\1,代表第一组,也就是复用,+号代表依次或多次

“ ”以空格切

“#”以#号切

如果字符串中有多个空格“ +”,多个空格

8.3 替换

将多个字母替换成一个

String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";

str = str.replaceAll("(.)\\1+", "$1");

System.out.println(str);

将电话号码中间四位用*号代替

String tel = "15800001111";//158****1111;

tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

System.out.println(tel);

("(.)\\1+", "$1") $1是用第一个参数的第一组数据,$是引用上一参数

这样可以将多个t和6个m换成一个

("(\\d{3})\\d{4}(\\d{4})", "$1****$2")保留电话号码的头和尾,中间我直接用4个*号代替就好了

(\\d{3})将数字重复三次并且把它放在第一组里面

8.4 获取

将字符串中三个字符的单词找出来

String str = "da jia hao,ming tian bu fang jia!";

String regex = "\\b[a-z]{3}\\b";

//1,将正则封装成对象。

Pattern p = Pattern.compile(regex);

//2, 通过正则对象获取匹配器对象。

Matcher m = p.matcher(str);

//使用Matcher对象的方法对字符串进行操作。

//既然要获取三个字母组成的单词

//查找。 find();

System.out.println(str);

while(m.find()){

System.out.println(m.group());//获取匹配的子序列

System.out.println(m.start()+":"+m.end());

}

"\\b[a-z]{3}\\b", \\b代表字符边界 ,[a-z]{3}代表三个小写字母

获取的三个步骤

九、正则表达式实例

* 1,治疗口吃:我我...我我...我我我要...要要要要...要要要要..学学学学学...学学编编...编编编编..编..程程...程程...程程程

* 2,对ip地址排序。

* 3,对邮件地址校验。

9.1 治疗口吃

String str = "我我...我我...我我我要...要要要要...要要要要..学学学学学...学学编编...编编编编..编..程程...程程...程程程";

//1,将字符串中.去掉。 用替换。

str = str.replaceAll("\\.+", "");

System.out.println(str);

//2,替换叠词。

str = str.replaceAll("(.)\\1+", "$1");

System.out.println(str);

9.2 对ip地址排序

String ip_str = "192.168.10.34  127.0.0.1  3.3.3.3  105.70.11.55";

//1,为了让ip可以按照字符串顺序比较,只要让ip的每一段的位数相同。

//所以,补零,按照每一位所需做多0进行补充。每一段都加两个0.

ip_str = ip_str.replaceAll("(\\d+)", "00$1");

System.out.println(ip_str);

//然后每一段保留数字3位。

ip_str = ip_str.replaceAll("0*(\\d{3})", "$1");

System.out.println(ip_str);

//1,将ip地址切出。

String[] ips = ip_str.split(" +");

TreeSet<String> ts = new TreeSet<String>();

for(String  ip : ips){

//      System.out.println(ip);

ts.add(ip);

}

for(String ip : ts){

System.out.println(ip.replaceAll("0*(\\d+)", "$1"));

}

9.3 邮件地址校验

String mail = "abc1@sina.com.cn";

String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3})+";

regex = "\\w+@\\w+(\\.\\w+)+";//1@1.1

boolean b = mail.matches(regex);

System.out.println(mail+":"+b);

Java基础七-正则表达式的更多相关文章

  1. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  2. java基础篇---正则表达式

    正则表达式在许多语言,例如Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能. 正则表达式是一种可以 ...

  3. 黑马程序员——【Java基础】——正则表达式

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1. 概念:符合一定规则的表达式. 2. 作用:用于专门操作字符串. 3. 特点:用一些特定的符 ...

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

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

  5. Java基础(63):正则表达式的运用

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  6. Java基础巩固--正则表达式

    本篇文章是学习尚学堂的关于正则表达式的视频教程时,所做的笔记.供广大编程爱好者学习之用,也留给日后自己复习使用! 1.为什么要有正则表达式? 正则表达式可以方便的对数据进行匹配,可以进行更加复杂的字符 ...

  7. java基础38 正则表达式

    1.常用的正则表达式  预定义字符类:.  任何字符(与行结束符可能匹配也可能不匹配) \d  数字:[0-9] \D  非数字: [^0-9] \s  空白字符:[ \t\n\x0B\f\r] \S ...

  8. 【Java基础】正则表达式

    目录 正则表达式 什么正则表达式 普通字符 预定义字符 特殊字符 数量限定字符 定位字符 选择符和分组 反向引用 预搜索 运算符的优先级 常用正则 附录 正则表达式 本文的大部分内容转载自正则表达式从 ...

  9. Java基础教程——正则表达式

    正则表达式·Regular Expression 正则表达式就是一个用于匹配字符串的模板,正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 主要用到的对象: java.util.rege ...

随机推荐

  1. n的相反数

    实例十:n的相反数 方法:result=(~n)+1 正数 负数 原数 0000 0011   1111 1111补码 1111 1100 0000 0010加一 1111 1011 0000 001 ...

  2. Nature重磅:Hinton、LeCun、Bengio三巨头权威科普深度学习

    http://wallstreetcn.com/node/248376 借助深度学习,多处理层组成的计算模型可通过多层抽象来学习数据表征( representations).这些方法显著推动了语音识别 ...

  3. 【转】Java中Synchronized的用法

    <编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java线程同步中的一 ...

  4. MIPSsim使用说明

    MIPSsim下载:https://files.cnblogs.com/files/jiangxinnju/MIPSsim.zip 启动模拟器 双击MIPSsim.exe,即可启动该模拟器.MIPSs ...

  5. 简单的HTML5 canvas游戏工作原理

    HTML5已经不是一个新名词.它看上去很cool,有很多feature,大多数人普遍看好它的发展.对于我来说,最感兴趣的是它的canvas标签,可以结合Javascript来绘制游戏画面. 我们可以在 ...

  6. 20145206邹京儒Exp6 信息搜集与漏洞扫描

    20145206邹京儒Exp6 信息搜集与漏洞扫描 一.实践过程记录 openvas漏洞扫描 1.openvas-check-setup来查看下他的安装状态: 如下图所示:在步骤7中出现错误,显示需要 ...

  7. 网站精准查询IP

    分享一些网站能精准查询IP的 https://www.chaidu.com/App/Web/IP/ http://www.ipip.net/ip.html http://www.hao7188.com ...

  8. Python3基础 str split 用指定的字符将字符串分割

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. 乘积尾零|2018年蓝桥杯B组题解析第三题-fishers

    标题:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 ...

  10. BZOJ5131: [CodePlus2017年12月]可做题2

    BZOJ没有题面,差评 洛谷的题目链接 题解 其实这题很久之前就写了,也想写个题解但是太懒了,咕到了今天 在typora写完题解不想copy过来再改格式了,于是直接贴截图qwq #include &l ...