2019-05-03

                                                      正则表达式

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

正则表达式起源

1956年,数学家Stephen Kleene(斯蒂芬.克林 )在Warren McCulloch(沃伦·麦克洛克)和Walter Pitts(沃尔特·皮特 )早期神经系统工作的基础上,设计出了一个数学符号体系——regular sets(规则的集合),这个东西很快被计算机科学家用于编译器的扫描或词法分析。由于正则表达式强大的文本处理能力,很快被应用到Unix的工具软件grep中;此后,正则表达式被广泛应用于Unix系操作系统、Perl、PHP,Delphi、JAVAScript、C#(.NET)、JAVA、python、Ruby等语言和开发环境中。

正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则

正则表达式的特点是:

1. 灵活性、逻辑性和功能性非常强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

组成规则:

1.字符

       x  字符 x。举例:a表示字符a

       \\反斜线字符。

       \n新行(换行)符('\u000A')

       \r回车符('\u000D')   

2.字符类

       [abc] a、b或 c(简单类)

       [^abc]任何字符,除了 a、b 或 c(否定)

       [a-zA-Z] a到z 或 A到 Z,两头的字母包括在内(范围)

       [0-9] 0到9的字符都包括

3.预定义字符类

       . 任何字符。我的就是.字符本身,怎么表示呢? \.

       \d数字:[0-9]

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

           在正则表达式里面组成单词的东西必须有这些东西组成

4.边界匹配器

       ^行的开头

       $行的结尾

       \b单词边界(需使用模式和匹配器)

              就是不是单词字符的地方。

              举例:hello world?haha;xixi

5.Greedy 数量词

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

       X* X,零次或多次

       X+ X,一次或多次

       X{n} X,恰好 n 次

       X{n,} X,至少 n 次

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

功能

正则表达式使用String类中提供的方法进行判断操作。

判断功能

public boolean matches(String regex)

分割功能

public String[] split(String regex)

替换功能

public String replaceAll(String regex,String replacement)

获取功能

Pattern和Matcher类的使用

案例

       /**案例1:手机号正则匹配*/

       // String regex ="\\w[0-9]?A[a-c]+";

       String regex ="1[35789][0-9]{9}";

       Scanner sc = new Scanner(System.in);

       String str = sc.nextLine();

       System.out.println(str.matches(regex));//str字符串是否匹配regex规则


       /**案例2:正则表达式匹配*/

       Scanner sc = new Scanner(System.in);

       String str = sc.nextLine();

       //首字母为A-Z,第二位为任意字符,其他位为字母,整体必须为11位。

       String regex1 ="[A-Z].[A-Za-z]{9}";

       //QQ号匹配规则:首字母不为0,只能为数字,至少为6位的号码

       String regex2 = "[1-9]\\d{5,}";

       String regex3 = "[1-9][0-9]{5,}";

       //身份证号:首字母不为0,整体18位的数字,结尾可以为数字也可以为X。

       String regex4 ="[1-9][0-9]{16}[0-9X]";

       String regex5 ="[1-9]\\d{16}[0-9X]";

       //密码规则:由字母数字下划线组成,不能有特殊字符,6-16位的字符

       String regex6 ="[A-Za-z0-9_]{6,16}";

       String regex7 = "\\w{6,16}";

       //网站:www.域名.com     其中域名可以为单词组成的任意字符至少出现一次

       String regex8 ="w{3}\\.\\w+\\.com";

       //验证码:4位数字组成

       String regex9 = "\\d{4}";

       System.out.println(str.matches(regex1));


       /**案例2:正则表达式常用方法*/

       //1.正则表达式,匹配:publicboolean matches(String regex)  

       //System.out.println("abc".matches("[a-z]{4}"));


       //2.正则表达式,分割:publicString[] split(String regex) 

       String str = "abc,123,Aaa,DDD";

       String[] arr = str.split(",");

       for(int i = 0;i<=arr.length - 1;i++){

              System.out.println(arr[i]);

       }

       //3.正则表达式,替换:publicString replaceAll(String regex,String replacement)

       System.out.println("dasdDADdaas".replaceAll("[A-Z]","M"));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 6,493评论 0 9
  • 1、正则表达式 在开发中,通常很多数据都会使用String类存储。原因:操作字符串的功能比较多,比较方便。在操作S...
    Villain丶Cc阅读 5,768评论 0 5
  • String类和正则表达式 今天的主要内容 Scanner类概述Scanner获取数据出现的小问题及解决方案 St...
    须臾之北阅读 5,921评论 0 3
  • #首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用法 环视用法...
    mapuboy阅读 5,546评论 0 51
  • 早上没事,快10点30分才出发!先到一个地方,具体是哪忘了,刘工去谈业务,我们在车里休息。在这里一个多小时,又...
    学渣8阅读 754评论 0 0