正则表达式

  以检验扣扣号是否合法为例引入正则表达式

  要求:校验QQ号,要求:必须是5~15位数字,0不能开头。

  1.没有正则表达式 

public class Demo1 {
public static void main(String[] args) {
String qq="45646465";
checkQQ(qq);
}
public static void checkQQ(String qq)
{
int len = qq.length();
if(len>=5 && len <=15)
{
if(!qq.startsWith("0"))
{
try
{
long l = Long.parseLong(qq);
System.out.println("qq:"+l);
}
catch (NumberFormatException e)
{
System.out.println("出现非法字符");
}
}
else
System.out.println("不可以0开头");
}
else
System.out.println("QQ号长度错误");
} }

   2.使用正则表达式

public class Demo1 {
public static void main(String[] args) {
String qq="45646465";
System.out.println(qq.matches("[1-9]\\d{4,14}")?"true":"false");
}

什么是正则表达式?

  正则表达式:其实一种规则,有自己特殊的应用,其作用就是针对于字符串进行操作。

  正则:就是用于操作字符串的规则,其中这些规则使用了一些字符表示。

  

正则表达式的符号(一部分)

                    预定义字符类

.

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

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

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

\S

非空白字符:[^\s]

\w

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

\W

非单词字符:[^\w]

   System.out.println("a".matches("."));

System.out.println("1".matches("\\d"));

System.out.println("%".matches("\\D"));

System.out.println("\r".matches("\\s"));

System.out.println("^".matches("\\S"));

System.out.println("a".matches("\\w"));

                    Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好n次

X{n,}

X,至少n次

X{n,m}

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

System.out.println( "a".matches(".") );

System.out.println( "a".matches("a") );

System.out.println("a".matches("a?") );

System.out.println( "aaa".matches("a*") );

System.out.println( "".matches("a+") );

System.out.println( "aaaaa".matches("a{5}") );

System.out.println( "aaaaaaaaa".matches("a{5,8}") );

System.out.println( "aaa".matches("a{5,}") );

System.out.println( "aaaaab".matches("a{5,}") );

                      范围表示

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

System.out.println( "a".matches("[a]") );

System.out.println( "aa".matches("[a]+") );

System.out.println( "abc".matches("[abc]{3,}") );

System.out.println( "abc".matches("[abc]+") );

System.out.println( "dshfshfu1".matches("[^abc]+") );

System.out.println( "abcdsaA".matches("[a-z]{5,}") );

System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") );

System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") );

System.out.println( "abdxyz".matches("[a-c[x-z]]+"));

System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}"));

System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}"));

正则表达式经常实现的功能

  匹配matches

    例题:是否为一个合法的手机号码

//匹配是否为一个合法的手机号码
public class Demo5 {
public static void main(String[] args) {
String telephoneNuumber = "18809405364";
System.out.println(checkTel(telephoneNuumber)?"合法":"不合法");
}
public static boolean checkTel(String a) {
String b = a;
String c = "1[34578]\\d{9}";//[0-9]数字在0-9,\\d只能是数字,{11}恰好11位数字
boolean f = b.matches(c);
return f;
}
}

  切割功能split

      例题:根据空格对一段字符串进行切割

import java.lang.reflect.Array;
import java.util.Arrays; //匹配是否为一个合法的手机号码
public class Demo4 {
public static void main(String[] args) { String str = "aa bb cc ";
System.out.println(splitDemo(str));
}
public static String splitDemo(String str) {
String str1 = str;
String[] arr = str1.split(" +");
return Arrays.toString(arr); }
}

      例题:根据重叠词进行切割

        分组概念((A)(B(C)))

          第1组 ((A)(B(C)))

          第2组 (A)

          第3组  (B(C))

          第4组  (C)

import java.util.Arrays;

public class Demo3 {

    public static void main(String[] args) {
String str = "sdqqfgkkkhjppppkl";
System.out.println(splitDemo2(str)); }
public static String splitDemo2(String str)
{
String str1 = str;
String[] arr = str1.split("(.)\\1+");
return Arrays.toString(arr);
}
}

  替换功能replaceAll

      例题:把手机号替换成“*”号

public class Demo2 {
public static void main(String[] args) {
replaces();
}
public static void replaces() {
String str = "联系方式:13327351612,联系方式:13327351612,联系方式:13327351612,联系方式:13327351612,联系方式:13327351612";
String reg = "1[34578]\\d{9}";
str = str.replaceAll(reg, "********");
System.out.println(str);
} }

  获取

      获取需要使用到正则的两个对象:使用的是用正则对象Pattern 和匹配器Matcher。

      用法:

    范例:

       Pattern p = Pattern.compile("a*b");

       Matcher m = p.matcher("aaaaab");

       boolean b = m.matches();

         步骤:

          1,先将正则表达式编译成正则对象。使用的是Pattern类一个静态的方法。compile(regex);

        2,让正则对象和要操作的字符串相关联,通过matcher方法完成,并返回匹配器对象。

        3,通过匹配器对象的方法将正则模式作用到字符串上对字符串进行针对性的功能操作

      匹配器要使用到的方法:

          find();通知匹配器去匹配字符串。查到就返回true,反之返回false

               group();获取符合规则的字符串

      注意:使用group前一定要用find方法去匹配器查找符合规则的字符串,否则报错

     例题:获取由3个字母组成的单词。

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo7 {
public static void main(String[] args) {
getDemo();
}
public static void getDemo()
{
String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!"; String reg = "\\b[a-z]{3}\\b";//"\b":单词边界匹配器,只是代表了单词的开始或者是接受部分,不匹配任何字符
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.group());
}
}
}

Day 10:浅谈正则表达式的更多相关文章

  1. 浅谈正则表达式-PHP为例

    第一次比较系统的学习正则表达式,本篇文章以PHP语言为例来学习. 基本概念 正则表达式=普通字符(如a-z)+分隔符(正斜线(/).hash符号(#) 以及取反符号(~))+特殊字符(称为元字符) 两 ...

  2. 浅谈Java正则表达式

    正则表达式我们都知道,它定义了字符串的模式,可以用来搜索.编辑或处理文本.我们在某些特定场景中用起来是非常方便的.它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果.比如我想判断一个几 ...

  3. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  4. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  5. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  6. JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

    toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...

  7. Linux的文本处理工具浅谈-awk sed grep

    Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...

  8. 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  9. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

随机推荐

  1. Activity的生命周期及协同作用

    生命周期 onCreate:创建Activity的实例对象的方法 onStart:启动当前的activity实例的方法 onResume:如果该方法执行,页面的实例和用户即可以交互 onPause:如 ...

  2. 继OpenJDK 之后,OpenJFX也将迁移到 Git

    导读 近日 OpenJFX 项目负责人 Kevin Rushforth 提交了一份将 OpenJFX 迁移到 GitHub 的提案. OpenJFX 是 JavaFX 的开源实现.JavaFX 是一个 ...

  3. Docker 学习之mysql与redis(二)

    在上一随笔中主要就是记录docker的基本使用以及nginx与php服务器的配置:在这一章将主要记录docker安装mysql与redis. 本节随笔参考网址:https://www.runoob.c ...

  4. 安装ruby的一些坑

    之前一直下载不下来.是因为需要翻墙.

  5. 彻底理解JavaScript中的this

    this 是 JavaScript 语言的一个关键字. 它是函数运行时,在函数体内自动生成的一个对象,只能在函数体内使用. 函数的不同使用场合,this 有不同的值.总的来说,this 就是函数运行时 ...

  6. java核心-多线程(8)- 并发原子类

        使用锁能解决并发时线程安全性,但锁的代价比较大,而且降低性能.有些时候可以使用原子类(juc-atomic包中的原子类).还有一些其他的非加锁式并发处理方式,我写这篇文章来源于Java中有哪些 ...

  7. spring core:@AliasFor的派生性

    spring对Annotation的派生性应用可谓炉火纯青,在spring core:@Component的派生性讲过支持层次上派生性,而属性上派生的需求则借助了@AliasFor,它是从spring ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-stop

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. 05 MySQL数据类型的选择与使用

    数据类型的选择     1.CHAR与VARCHAR           存储/检索的方式不同.         CHAR是固定长度,而VARCHAR是可变长度         非SQLMode下,超 ...

  10. Python3中的bytes和str类型

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...