正则表达式(在Java中示范)

        正则表达式(regular expression,简写为regex)是一个字符串,可以根据不同类型的数字字母组合的字符串用更加简洁的方式与其匹配,在字符串处理方面上,用处较大,所以熟练地运用它可以大程度地提高效率。

1、匹配

在Java中我们可以用String类的matches方法。在这里要与equals方法进行比较。matches方法可以匹配符合一个“模式”的字符串(也就是正则表达式),比如下面此结果便为true。

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = new String("aaaa");
		String regex = "a*";
		System.out.print(s.matches(regex));
	}

}

2、正则表达式的各种字符以及常用语法

注意反斜杠(/)字符,表示其需要//来表示

(1)、元字符

代码说明示例
.匹配除换行符以外的任意单个字符hello匹配"h.l.o"
\w单词字符(字母/数字/下划线/汉字)等同于[a-z[A-Z][0-9]_]或[a-Za-z0-9_]a2_匹配"\\w\\w\\w"
\s空白字符(' '、'\t'、'\n'、'\r'、'\f'均为空白字符)\r匹配"\\s"
\d一位数字23匹配"\\d3"
\b单词的开始或结束
^字符串的开始(在集合字符里[^a]表示非(不匹配)的意思)It's a nice day today.匹配"^It's a nice day today."
$字符串的结束It's a nice day today.匹配"It's a nice day today.$"

(2)、反义字符

代码说明示例
\W任意不是字母,数字,下划线,汉字的字符\r匹配"\\W"
\S任意不是空白符的字符23匹配"2\\S"
\D任意非数字的字符d匹配"\\D"
\B不是单词开头或结束的位置
[^x]除了x以外的任意字符
[^hello]除了hello这几个字母以外的任意字符

(3)、量词符

代码说明示例
*重复0次或更多次aaa匹配"a*"
+重复1次或更多次a匹配"a+b*"
?重复0次或1次d匹配"d?"
{n}重复n次oop匹配"o{2}p"
{n,}重复n次或更多次oppo匹配"op{1,}o"
{n,m}重复n到m次(包括两端)aab匹配"a{2,9}b"

ps:可以使用括号让对象更加明确比如:opop匹配"(op){2}"

还可以用|来表示或

量词符都是贪婪量词,实行“贪婪分配”,下面内容会提及

(4)、常用的正则表达式语法

3、懒惰分配和贪婪分配

        贪婪分配是指在匹配过程中匹配尽可能多的字符(遇到重复的符合条件的字符串)例如:

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = new String("aabab");
		String regex = "a.*b";
		System.out.print(s.matches(regex));
	}

}

此会返回true。事实上,量词符均为贪婪量词,实行贪婪分配。倘若要使其实行懒惰分配,即:分配尽可能少的字符,则需要懒惰限定符(加问号)

代码说明
*?重复任意次,尽可能少重复
+?重复1次或更多次,尽可能少重复
??重复0次或1次,尽可能少重复
{n,m}?重复n到m次,尽可能少重复
{n,}?重复n次以上,尽可能少重复

4、替换和拆分字符串

        在Java的String类中有replaceAll、replaceFirst、split方法替换拆分字符串

(1)、replaceAll(替换全部)

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("Java Java Java".replaceAll("v\\w","wi"));
	}

}

 (2)、replaceFirst(只替换第一个)

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("Java Java Java".replaceFirst("v\\w","wi"));
	}

}

 (3)、split

String[] tokens = "abc1babala2hello3".split("\\d");

拆分为abc、babala、hello并分别保存在tokens[0]、tokens[1]、tokens[2]中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值