Day 10:浅谈正则表达式
正则表达式
以检验扣扣号是否合法为例引入正则表达式
要求:校验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:浅谈正则表达式的更多相关文章
- 浅谈正则表达式-PHP为例
		第一次比较系统的学习正则表达式,本篇文章以PHP语言为例来学习. 基本概念 正则表达式=普通字符(如a-z)+分隔符(正斜线(/).hash符号(#) 以及取反符号(~))+特殊字符(称为元字符) 两 ... 
- 浅谈Java正则表达式
		正则表达式我们都知道,它定义了字符串的模式,可以用来搜索.编辑或处理文本.我们在某些特定场景中用起来是非常方便的.它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果.比如我想判断一个几 ... 
- 浅谈JavaScript中的正则表达式(适用初学者观看)
		浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ... 
- 在net中json序列化与反序列化    面向对象六大原则   (第一篇) 一步一步带你了解linq to Object    10分钟浅谈泛型协变与逆变
		在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ... 
- Linux特殊符号浅谈
		Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ... 
- JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈
		toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ... 
- Linux的文本处理工具浅谈-awk sed grep
		Linux的文本处理工具浅谈 awk 老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ... 
- 【ASP.NET MVC系列】浅谈ASP.NET  MVC  路由
		ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ... 
- 【微信小程序项目实践总结】30分钟从陌生到熟悉  web app 、native app、hybrid app比较  30分钟ES6从陌生到熟悉  【原创】浅谈内存泄露  HTML5 五子棋 - JS/Canvas 游戏  meta 详解,html5 meta 标签日常设置  C#中回滚TransactionScope的使用方法和原理
		[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ... 
随机推荐
- 使用zabbix server监控tomcat实战案例
			使用zabbix server监控tomcat实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家都知道,zabbix server效率高是使用C语言编写的,有很多应用程序 ... 
- imput placeholder 移动端不居中问题
			input{ height: 100%; } input::-webkit-input-placeholder { display: flex; align-items: center; line-h ... 
- 利用 Ruoyi 开发自己的业务管理系统__测试结构完成
			前言铺垫不多说 (1)Ruoyi这个平台不错:如果你觉得你比Ruoyi的作者牛逼,你就不用看我这个文章了,你可以走了,因为我自认为比Ruoyi的作者要烂: (2)必须已经成功搭建Ruoyi,并能在自己 ... 
- Service总结
			Service Service的应用场景,以及和Thread区别 开启Service的两种方式以及区别 Service基础 Service是什么? Service(服务)是一个可以在后台长时间运行而没 ... 
- 01 DDL(DataDefinitionLanguage)
			注: 语句用 ; 或 \g \G 表示结束 . 建库语句 : CREATE DATABASE db_name ; 查询有哪些库 : SHO ... 
- windows平台上运行Flink_转载于CSDN
			Flink安装部署-window 本地部署原创冰上浮云 发布于2019-08-17 15:56:06 阅读数 633 收藏分类专栏: flink版权声明:本文为博主原创文章,遵循 CC 4.0 BY- ... 
- 100-PHP二维数组的元素输出三
			<?php $stu=array(array(76,87,68), array(65,89,95), array(90,80,66), array(90,95,65)); //定义一个二维数组 ... 
- 记录一次SQLServer 2019 MDS问题的排查
			问题表象: MDS网页里看不到任何建立的模型和实体. 用Excel add in连接,提示SQLServer授权过期. 但实际上SQLServer是企业版,目前并没有过期. 背景分析: 我们的环境是从 ... 
- 实验吧-杂项-你知道他是谁吗?(转盘密码、NTFS数据流检测及导出)
			刚看到的时候听懵,没注意到重点,其实很多时候题目中的细节就是给我们线索的,所以审题和思考是很重要的. 在没做到点上的是,也做了一点努力,没有效果,科普一下这个人((*^▽^*))图片上是托马斯.杰斐逊 ... 
- Maven的安装和创建项目的过程
			一.下载Maven包和配置环境变量 1.将下载好的maven包放到一个目录中:目录中不能有汉字和空格 2.配置环境变量 3.配置path路径 二.配置阿里云私服 1.找到setting目录,配置下载j ... 
