正则表达式

概念

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
特点:
1.正则表达式描述了一种字符串匹配的模式,也称规则表达式
2.常用于检索、替换符合指定模式(规则)的文本
3.大多数语言都支持正则表达式。如:Java;Python;JavaScript等

正则表达式语法

正则表达式是由普通字符与特殊字符组成的字符串
普通字符:原义字符、非打印字符
特殊字符:元字符:* + ? $ ^ . | \ ( ) { } [ ]

示例1:hello 可以匹配“hello”
示例2:h.*llo 可以匹配“hello”、“hallo”、“heello”……

非打印字符:
在这里插入图片描述

特殊字符:
在这里插入图片描述
预定义字符:
在这里插入图片描述

Java正则表达式

java.util.regex包

Pattern类:表示一个正则表达式,或者说匹配模式
Matcher类:Pattern对象matcher()方法的返回值,表示正则表达式对输入字符串的匹配结果

Pattern p=Pattern.compile("h\\w*llo");
System.out.println(p.pattern());//输出正则表达式字符串“h\w*llo”
Matcher matcher=p.matcher("hello");
if(matcher.matches())
	System.out.println(matcher.group());//输出匹配结果

分组

如何获取字符串“hello”中的字符“e”?
使用“()”分组

Pattern p=Pattern.compile("h(\\w*)llo");
Matcher matcher=p.matcher("hello");
if(matcher.matches())
	System.out.println(matcher.group(1));//输出匹配结果

命名分组

Pattern p=Pattern.compile("h(?<result>\\w*)llo");
Matcher matcher=p.matcher("hello");
if(matcher.matches())
	System.out.println(matcher.group("result"));//输出匹配结果

练习1:使用正则表达式识别手机号码
需求说明
识别13X打头的手机号码
识别13X、18X打头的手机号码
识别所有手机号码并提取手机号段

//  手机号码验证
public class RegexDemo_1 
{
  public static void main(String[] args)
  {
 String tel = "";
 Scanner in = new Scanner(System.in);
 
 while(!tel.equals("over") )
 {
 System.out.println("请输入需要验证的手机号码:");
 tel = in.nextLine();
 if(tel.equals("over"))
 
 {System.out.println("退出验证");
   break;
 }
if(isAtelNumber(tel))
    System.out.println("正确:该号码是一个手机号码");
else  
System.out.println("错误:该号码不是手机号码");
 
 };  
  }
  
  public static boolean isAtelNumber(String tel)
  {
String regex = "1[358]\\d{9}";
Pattern p = Pattern.compile(regex);
 Matcher m = p.matcher(tel);
 
return m.matches();
 
  }
}

练习2:使用正则表达式切割字符串
需求说明
使用String的split()方法提取以“|”分割的字符串“jason|20|Java,Hadoop,Python”中的字段信息
分析
String的split()支持正则表达式作为参数
“|”是正则表达式元字符,必须进行转义

我有如下一个字符串:"91,27,46,38,50"
 * 写代码实现最终输出结果是:"27,38,46,50,91"
 * 
 * 分析:
 *     A:定义一个字符串
 *     B:把字符串进行分割,得到一个字符串数组
 *     C:把字符串数组进行变换成int数组
 *     D:对int数组排序
 *     E:把排序后的int数组在组装成一个字符串
 *     F:数组字符串
 *     
 */
public class 正则表达式练习2 {

	public static void main(String[] args) {
		//定义一个字符串
		String s ="91,27,46,38,50";
		
		//把字符串进行分割,得到一个字符数组
         String[] strArray = s.split(",");
         
         //把字符串数组变换成int数组
         int[] arr =new int[strArray.length];
         
         for(int x=0;x<arr.length;x++) {
        	 arr[x]=Integer.parseInt(strArray[x]);
         }
         //对数组排序
         Arrays.sort(arr);
         
         //把排序后的int数组再组装成一个字符串
         StringBuilder sb = new StringBuilder();
         for(int x =0;x<arr.length;x++) {
        	 sb.append(arr[x]).append(" ");
         }
         //转化字符串
         String result = sb.toString().trim();
         System.out.println(result);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值