java中的正则表达式

          正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。

          正则表达式是一个String对象的字符序列。

1. 元字符

字符序列中含有具有特殊意义字符,这些特殊字符称做正则表达式中的元字符。

它表示某一类字符,写法固定,下表是正则表达式的元字符:

2. 元字符表达式

使用中括号,实现运算。

[abc]: 代表a、b、c中的任何一个
[^abc]: 代表除了a、b、c以外的任何字符;
[a-zA-Z]: 代表英文字母(包括大写和小写)中的任何一个;
[a-d]: 代表a-d中的任何一个;

中括号里允许嵌套中括号,可以进行并、交、差运算,例如:

[a-d[m-p]]:代表a~d,或m~p中的任何字符(并);
[a-z&&[defl]:代表d、e或f中的任何一个(交);
[a-f&&[^bc]]:代表a、d、e、f (差)。

3. 限定符

表示出现的次数,如下图。

4.注意事项

(1) 由于"."代表任何一个字符,所以在正则表达式中如果想使用普通意义的点字符,必须使用[.]\56表示普通意义的点字符。

(2) 若有些字符是固定的,则不需要使用元字符等,直接使用该字符即可。例如:匹配某个书名,书名号是固定的,则可以编写正则表达式为String regex = "《.*》"

5.测试正则表达式

(1) 判断某字符串是否符合要求的方法:matches,返回值是true或者false。

例如判断日期格式:

System.out.println("1997-11-09".matches("\\d{4}\\-\\d{2}\\-\\d{2}"));
System.out.println("1997/11/09".matches("\\d{4}\\-\\d{2}\\-\\d{2}"));

执行结果:

true

false

(2) 找出某文本中的所有符合规则的文本,可编写工具类如下:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexUtil {
	
	 public static List<String> findByRegex(String text,String regex) throws IOException
	 {
            //正则表达式的编译表示形式(模式)
	    Pattern p = Pattern.compile(regex);
            //通过解释 Pattern 对 字符序列执行匹配操作的引擎。 通过调用模式的 matcher 方法从模式创建匹配器。
            Matcher m = p.matcher(text);
            List<String>  list = new ArrayList<String>();
            //尝试查找所有与该模式匹配的序列
	    while(m.find()) {
	         String g = m.group();//得到匹配操作所匹配的输入子序列。
	         list.add(g);
	     }
	     return list;
	 }
}

测试主类:

public class Test {

	public static void main(String[] args) throws IOException {
		String text = "《钢铁是怎样炼成的》是前苏联作家尼古拉·奥斯特洛夫斯基所著的一部长篇小说,于1933年写成。\r\n" + 
				"小说通过记叙保尔·柯察金的成长道路告诉人们,一个人只有在革命的艰难困苦中战胜敌人也战胜自己,只有在把自己的追求和祖国、人民的利益联系在一起的时候,才会创造出奇迹,才会成长为钢铁战士。\r\n" + 
				"2020年4月,列入《教育部基础教育课程教材发展中心 中小学生阅读指导目录(2020年版)》初中段。";
		System.out.println("文本示例:\n"+text);
		//书名的正则
		String regex = "《.*》";
		//找到所有的书名
		List<String> bookList = RegexUtil.findByRegex(text,regex);
		//遍历输出
		System.out.println("\n该文本的书名有:");
		for(String book : bookList) {
			System.out.println(book);
		}
	}

}

执行结果:

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值