正则表达式

来源:互联网 发布:.it域名 编辑:程序博客网 时间:2024/05/18 02:45

正则表达式,又称正规表示法常规表示法英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

概念

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

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

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

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

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

 

字符类

[abc] ab c(简单类)

[^abc] 任何字符,除了 ab c(否定)

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

[a-d[m-p]] a d m p[a-dm-p](并集)

[a-z&&[def]] de f(交集)

[a-z&&[^bc]] a z,除了 b c[ad-z](减去)

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

 

预定义字符类

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

\d 数字:[0-9]

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

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

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

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

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

 

    

Greedy 数量词

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

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n

X{n,} X,至少 n

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

 

 

 

 正则表达式的作用:

   1.匹配字符串

   2.切割字符串

   3.替换字符串

   4.获取:

      a.将正则表达式封装成对象

      b.让正则对象和要操作的字符串相关联

      c.关联以后,获取正则匹配引擎

      d.通过引擎对符合规则的字串进行操作,比如取出

 

一个简单的Demo

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

 

public class RegexDemo1 {

         publicstatic void main(String[] args) {

                  

                   Stringstr = "b";

                   Stringreg = "[a-zA-Z][0-9]";

                  

                   //切割多个空格

                   splitDemo("zhang   wang        wan", " +");

                   //切割.

                   splitDemo("ada.agda.agdafe","\\.");

                   //切割文件

                   splitDemo("c:\\dafd\\ada.txt","\\\\");

                   //切割叠词

                   splitDemo("adfafzzzzzzzzzzzzzzsgegefewfewfwwwwwwwwwwwwwwwafda","(.)\\1+");

                  

                   //将叠词替换成一个字符

                   replaceAllDemo("dafdaszzzzzzzzzzzzdafdadddddeweqdf","(.)\\1+","$1");

                  

                  

                   /*

                    * 获取

                    */

                   Stringstri = "wo men ming tian fang jia le ,huo ban men ";

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

                   Patternp = Pattern.compile(regx);

                   Matcherm = p.matcher(stri);

                   m.matches();

                   while(m.find()){

                            System.out.println(m.group());

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

                   }

         }

         publicstatic void replaceAllDemo(String str, String reg, String newStr) {

                   str= str.replaceFirst(reg, newStr);

                   System.out.println(str);

         }

         publicstatic void splitDemo(String str, String reg) {

                   String[] arr = str.split(reg);

                   for(Strings : arr) {

                            System.out.println(s);

                   }

         }

 

}

应用情景一:

publicclassdemo1 {

 

   publicstaticvoid main(String[] args) {

      //将下列字符串变为:我要学编程

      //思路:

      //1.先去掉点

      //2.将多个重复的内容变为单个

      Stringstr = "我我...我我...我要...要要...要要...学学学...学学...编编编...编程............";

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

      System.out.println(str);

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

      System.out.println(str);

   }

 

}

 

应用情景二:

import java.util.TreeSet;

 

 

publicclassdemo2 {

   /*

    * 192.168.1.254 102.49.23.013 10.10.10.102.2.2.2 8.109.90.30

    * ip地址进行地址段顺序排序

    */

   publicstaticvoid main(String[] args) {

     

      //checkIp();

     

      //

      Stringmail = "wangjign@qq.com.cn.org";

      //较为精确的匹配

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

      //相对不太精确的匹配

      Stringreg1 = "\\w+@\\w+(\\.\\w+)+";

      System.out.println(mail.matches(reg));

   }

 

   privatestaticvoidcheckIp() {

      Stringip = "192.168.1.254 102.49.23.01310.10.10.10 2.2.2.2 8.109.90.30";

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

      System.out.println(ip);

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

      Stringstr[] = ip.split(" ");

      TreeSet<String>tree = newTreeSet<>();

      for(String s : str) {

         tree.add(s);

      }

      for(String s : tree) {

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

      }

   }

}

 

应用情景三:

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

 

public class demo3 {

         //网页爬虫(蜘蛛)

        

         publicstatic void main(String[] args) throws IOException {

                   getMails();

                   getMailsFromURL();

         }

         publicstatic void getMailsFromURL() throws IOException {

                   URLurl = new URL("www.sina.com");

                   URLConnectionconn = url.openConnection();

                   BufferedReaderbr = new BufferedReader(new InputStreamReader(conn.getInputStream()));

                   Stringline = null;

                   StringmailReg = "\\w+@\\@(\\.\\w+)+";

                  

                   Patternp = Pattern.compile(mailReg);

                  

                  

                   while((line= br.readLine())!= null) {

                           

                            Matcherm = p.matcher(line);

                            while(m.find()){

                                     m.group();

                            }

                           

                            System.out.println(line);

                   }

         }

         publicstatic void getMails() throws IOException {

                   BufferedReaderbr = new BufferedReader(new FileReader("d:\\mail.txt"));

                   Stringline = null;

                   StringmailReg = "\\w+@\\@(\\.\\w+)+";

                  

                   Patternp = Pattern.compile(mailReg);

                  

                  

                   while((line= br.readLine())!= null) {

                           

                            Matcherm = p.matcher(line);

                            while(m.find()){

                                     m.group();

                            }

                           

                            System.out.println(line);

                   }

         }

}

0 0
原创粉丝点击