Java正则表达式

一,Java正则表达式的基本知识

1,方括号:方括号中指定的单个字符才参与匹配

public class Test {
	public static void main(String[] args) {
		System.out.println("a".matches("[abc]"));	//true
   		System.out.println("abc".matches("[abc]"));	//false
		System.out.println("a".matches("[a-c]"));	//true
	}
}

2,逻辑运算符

符号

说明

 |

 或运算符,参见示例一

 (隐式)

 并运算符,a并b等价于ab

 &&

 交运算符,参见示例二

 ^

 非运算符,参见示例三

示例一:如果想要匹配多个字符,则不能使用[],而要使用()

public class Test {
	public static void main(String[] args) {
		System.out.println("aa".matches("(a|aa)"));	//true
		System.out.println("aa".matches("[a|aa]"));	//false
	}
}

示例二:&&一定要在[]内部使用,否则会被认为是匹配2个连续的&符号

public class Test {
	public static void main(String[] args) {
		System.out.println("a&&b".matches("a&&b"));	//true
		System.out.println("b".matches("[a-b&&b]"));	//true,等价于[b]
		System.out.println("a".matches("[a-f&&[^bcdef]]"));	//true,等价于[a]
 	}
}

示例三:^一定要在[]内部使用,否则将被认作起始边界符

public class Test {
	public static void main(String[] args) {
		System.out.println("c".matches("[^a]"));	//true
		System.out.println("c".matches("^a"));	//false
		System.out.println("c".matches("[^a-c]"));	//false
	}
}

3,表示匹配次数的符号

符号

匹配次数

 *

 0次或多次

 +

 1次或多次

 ?

 0次或1次

 {n}

 恰好n次

 {n,}

 至少n次

 {n,m}

 至少n次,但不超过m次

4,预定义字符

符号

等价正则表达式

 .(句点符号)

 匹配任意单个字符,包括空格符、制表符和换行符,参见示例四

 \d

 [0-9]

 \D

 [^0-9]

 \w

 [a-zA-Z_0-9]

 \W

 [^a-zA-Z_0-9]

 \s

 [\t\n\x0B\r\f](\t:水平制表符,\n:换行符,\x0B:垂直制表符,\r:回车符,\f:换页符)

 \S

 [^\t\n\x0B\r\f]

示例四:

public class Test {
	public static void main(String[] args) {
		//Tab
		System.out.println("a	b".matches("a.b"));	//true
		System.out.println("ab".matches("a.b"));	//false
		System.out.println("aabb".matches("a.b"));	//false
	}
}

5,边界字符

符号

含义

 ^

 行的开头

 $

 行的结束

Pattern p = Pattern.compile("^\\d*$");

等价于:

Pattern p = Pattern.compile("\\d*");

 

二,Java正则表达式相关对象

java.util.regex.Pattern:Pattern的实例对象是不可变对象,线程安全

java.util.regex.Matcher:Matcher的实例对象是非线程安全

public class Test {
	public static void main(String[] args) {
		Pattern p = Pattern.compile("\\d*");
		Matcher m = p.matcher("123");
		System.out.println(m.matches());
	}
}

上面的代码等价于:

public class Test {
	public static void main(String[] args) {
		boolean result = Pattern.matches("\\d*", "123");
		System.out.println(result);
	}
}

由于无法重用已编译的模式,故对于重复的匹配效率不高

然后再来看下String类的matches方法

    public boolean matches(String regex) {
        return Pattern.matches(regex, this);
    }

在有些情况下会希望正则表达式不区分大小写:

public class Test {
	public static void main(String[] args) {
		Pattern p = Pattern.compile("http",Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher("HTtp");
		System.out.println(m.matches());	//true
 	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值