java基础-Java正则表达式

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值