java基础-Java正则表达式

来源:互联网 发布:麦迪生涯数据 编辑:程序博客网 时间:2024/05/16 05:32

Java正则表达式

一:什么是正则表达式

1. 定义:正则表达式就是符合一定规则的字符串

2. 用途:用于专门操作字符串,正则表达式可以用来搜索、编辑或处理文本。例如

字符串匹配

字符串查找

字符串替换

字符串分割

好处:可以简化对字符串的复杂操作,正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

弊端:符号定义越多,正则越长,阅读性越差。

具体操作功能:

1,匹配:String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
2,切割:String split();
3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。

import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexMatches{    public static void main( String args[] ){      // 按指定模式在字符串查找      String line = "This order was placed for QT3000! OK?";      String pattern = "(.*)(\\d+)(.*)";      // 创建 Pattern 对象      Pattern r = Pattern.compile(pattern);      // 现在创建 matcher 对象      Matcher m = r.matcher(line);      if (m.find( )) {         System.out.println("Found value: " + m.group(0) );         System.out.println("Found value: " + m.group(1) );         System.out.println("Found value: " + m.group(2) );      } else {         System.out.println("NO MATCH");      }   }}


常见规则

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 单词边界

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

   举例:helloworld?haha;xixi

5.Greedy 数量词 

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

   X* X,零次或多次

   X+ X,一次或多次

   X{n} X,恰好 n 次 

   X{n,} X,至少 n 次 

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

常用功能例子:

importjava.io.*;publicclassCheckEmail {     publicstaticboolean checkEmail(String email)        {// 验证邮箱的正则表达式             String format = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}";            //p{Alpha}:内容是必选的,和字母字符[\p{Lower}\p{Upper}]等价。如:200896@163.com不是合法的。            //w{2,15}: 2~15个[a-zA-Z_0-9]字符;w{}内容是必选的。 如:dyh@152.com是合法的。            //[a-z0-9]{3,}:至少三个[a-z0-9]字符,[]内的是必选的;如:dyh200896@16.com是不合法的。            //[.]:'.'号时必选的; 如:dyh200896@163com是不合法的。            //p{Lower}{2,}小写字母,两个以上。如:dyh200896@163.c是不合法的。            if(email.matches(format))                {                    returntrue;// 邮箱名合法,返回true                 }            else                {                    returnfalse;// 邮箱名不合法,返回false                }        }             publicstaticvoid main(String[] args) throwsException    {        String email = "cc**365@163.com";// 需要进行验证的邮箱         while(true)        {             email = newBufferedReader(newInputStreamReader(System.in)).readLine();            if(CheckEmail.checkEmail(email))// 验证邮箱            {                           System.out.println(email+"\n是合法的邮箱名。");            }            else            {                System.out.println(email+"\n不是合法的邮箱名。");            }        }    }}

/*网页爬虫(蜘蛛)*/import java.io.*;import java.util.regex.*;import java.net.*;import java.util.*;class RegexTest2 {public static void main(String[] args) throws Exception{getMails_1();}public static void getMails_1()throws Exception{URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");URLConnection conn = url.openConnection();BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line = null;String mailreg = "\\w+@\\w+(\\.\\w+)+";Pattern p = Pattern.compile(mailreg);while((line=bufIn.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}/*获取指定文档中的邮件地址。使用获取功能。Pattern  Matcher*/public static void getMails()throws Exception{BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));String line = null;String mailreg = "\\w+@\\w+(\\.\\w+)+";Pattern p = Pattern.compile(mailreg);while((line=bufr.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}}











0 0
原创粉丝点击