Java 正则表达式 (regex)(基础知识)

匹配字符串

matches 方法

String.matches() 返回是否匹配指定的字符 如果是返回true 否则返回false 类似于 equals方法

例:

"java".matches("java"); return true

当然 括号中是 正则表达式 matches 要做的是判断 当前字符串是否满足正则表达式

正则表达式的语法

 

更正 : 表格最后一个空删去最后一行 

几个注意点 :

  • 反斜杠是 特殊字符 要用  \\ 表示  括号要用 \\(
  • 空白字符 即 ' ' '\t' '\n' '\r' 和 '\f'  则 \s 就是 [\t\n\r\f]
  • 单个字符是任何字母, 数字 , 或下划线字符
  • 量词符 (quantifier)用于确定量词符前面的模式会重复多少次 即六个条目:* 、 + 、 ? 、 {n} 、 {n, } 、{n, m}   其中 *等同于 {0, }, +等同于 {1,} , ?等同于{0,1}
  • 不要再重复量词中使用空白符  例 : a{2,3} 不能写成 a{2,  3}  
  • 可以用括号进行模式分组 例如: (ab){3} 匹配ababab ab{3}匹配abbb
import java.util.Scanner;
public class Regex {
	public static void main(String[] args) {
		if("java".matches("j{1,3}ava")) System.out.println("true");
		else System.out.println("false");
        /*
           返回true
        */

        /*加了下面一段 就编译错误了

         Unclosed counted closure near index 4
 
         */

		//if("java".matches("j{1, 3}ava")) System.out.println("true");
		//else System.out.println("false");

            
	}

}

一些示例:

import java.util.Scanner;
public class Regex {
	public static void main(String[] args) {
		//示例1  社会安全号的模式 xxx-xx-xx 
		System.out.println("1: ");
		if("222-11-44".matches("[\\d]{3}-[\\d]{2}-[\\d]{2}")) System.out.println("true");
		else System.out.println("false");
		if("222-11-44".matches("[\\d]{3}-[\\d]{2}-[\\d]{4}")) System.out.println("true");
		else System.out.println("false");
		//返回 一个true false
		
		//示例2  以偶数结尾的数字
		System.out.println("2: ");
		if("222".matches("[\\d]*[02468]")) System.out.println("true");
		else System.out.println("false");
		if("221".matches("[\\d]*[02468]")) System.out.println("true");
		else System.out.println("false");
		/*返回 true false
		 * [\\d]*代表任意多个数字
		 * [02468]代表后面加任何一个一位偶数
		 * 那么组合起来可以表示末尾是偶数的数
		 */
		
		
		//示例3  电话号码模式(xxx)xxx-xxxx
		System.out.println("3: ");
		if("(123)224-4152".matches("\\([\\d]{3}\\)[\\d]{3}-[\\d]{4}")) System.out.println("true");
		else System.out.println("false");
		if("123224-4152".matches("\\([\\d]{3}\\)[\\d]{3}-[\\d]{4}")) System.out.println("true");
		else System.out.println("false");
		/*输出 true false
		 * 括号是正则表达式的特殊字符 用\\( 和 \\) 来表示 字面值
		 */
		
		
		//示例4  姓名 至少2个最多20个字符 且首字母大写
		System.out.println("4: ");
		if("Amy".matches("[A-Z][a-zA-Z]{1,19}")) System.out.println("true");
		else System.out.println("false");
		if("Amy000".matches("[A-Z][a-zA-Z]{1,19}")) System.out.println("true");
		else System.out.println("false");
		if("A".matches("[A-Z][a-zA-Z]{1,19}")) System.out.println("true");
		else System.out.println("false");
		//输出 true false false
		
		
		
		//示例5 判断是否为标识符
		/*
		 * 标识符是以字母、数字、下划线和美元符号组成 但不能由数字开头 
		 */
		System.out.println("5: ");
		if("Amy000".matches("[A-Za-z_$][\\w$]*")) System.out.println("true");
		else System.out.println("false");
		if("2qw".matches("[A-Za-z_$][\\w$]*")) System.out.println("true");
		else System.out.println("false");
		//输出 true false 
		
		
		//示例6 选择匹配 
		System.out.println("6: ");
		if("hello java".matches("hello (java|world)")) System.out.println("true");
		else System.out.println("false");
		if("hello world".matches("hello (java|world)")) System.out.println("true");
		else System.out.println("false");
		//输出 true true
		
		
		//示例7 任何字符串 
		System.out.println("7: ");
		if("hello javat/bdd/fvvv12.,".matches(".*")) System.out.println("true");
		else System.out.println("false");
		//输出true
		
	}

}

返回情况:

1: 
true
false
2: 
true
false
3: 
true
false
4: 
true
false
false
5: 
true
false
6: 
true
true
7: 
true

替换拆分字符串

replaceAll() 替换所有比匹配的字符串

replaceFirst() 替换第一个匹配的字符串  

split() 使用匹配的分隔符将一个字符串分割为多个子字符串

+replaceAll(regex: String, replacement : String) : String 将所有字符串替换为replacement变量中的字符串 

+replaceFirst(regex: String, replacement : String) : String 将匹配的第一个字符串转换为replacement中的变量字符串 并返回新的字符串 

+split(regex: String) : String[ ] 返回一个字符串数字包含被匹配模式的分隔符拆分的字符串

+split(regex: String, limit : int) : String[ ] 除使用了limit参数控制的模式应用次数外,与前相同 最多匹配limit - 1次 limit <= 0等同于 split(regex);

测试:

import java.util.Scanner;
public class Regex {

	public static void main(String[] args) {
		System.out.println("Java Java Java".replaceAll("v\\w", "wi"));
		//输出 Jawi Jawi Jawi
		
		System.out.println("Java Java Java".replaceFirst("v\\w", "wi"));
		//输出 Jawi Java Java
		
        String[] tokens1 = "java1java2java3lllll2l".split("\\d", 0);
        for(String i : tokens1)
            System.out.print(i + " ");
        //输出java java java lllll l
        
        
        String[] tokens2 = "java1java2java3lllll2l".split("\\d", 1);
        for(String i : tokens2)
            System.out.print(i + " ");
        System.out.println();
        //输出java1java2java3lllll2l
        
        
        String[] tokens3 = "java1java2java3lllll2l".split("\\d", 2);
        for(String i : tokens3)
            System.out.print(i + " ");
        System.out.println();
        //输出java java2java3lllll2l
        
        
        String[] tokens4 = "java1java2java3lllll2l".split("\\d", 3);
        for(String i : tokens4)
            System.out.print(i + " ");
        System.out.println();
        //输出java java java3lllll2l
        
        
        String[] tokens5 = "java1java2java3lllll2l".split("\\d", 4);
        for(String i : tokens5)
            System.out.print(i + " ");
        System.out.println();
        //输出java java java lllll2l
        
        
        String[] tokens6 = "java1java2java3lllll2l".split("\\d", 5);
        for(String i : tokens6)
            System.out.print(i + " ");
        System.out.println();
        //输出java java java lllll l
        
	}

}

运行结果:

Jawi Jawi Jawi
Jawi Java Java
java java java lllll l java1java2java3lllll2l 
java java2java3lllll2l 
java java java3lllll2l 
java java java lllll2l 
java java java lllll l 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值