java面试之javaSE——java基础(正则表达式)

java如何支持正则表达式

java的String类提供了支持正则表达式的方法,并且java中Pattern提供了丰富的API支持各种正则表达式操作。

1、java 正则表达式元字符

元字符是在java正则表达式中具有特殊含义的字符。
Java中正则表达式的元字符如下:

   ( ) [ ] { } \ ^ $ | ? * + . < > - = !

其中,[ ] 表示正则表达式中的字符类

字符类 含义
[abc] 字符a、b、c
[^abc] 除了字符x、y、z以外的其他字符
[a-z] 字符a和z之间的所有字符
a-cx-z 字符a到c或x到z,其中包括字符a、b、c、x、y、z
0-9&&[4-8] 字符0到9和字符4到8的交集,即字符4、5、6、7、8
[a-z&&[^aeiou]] 字符a到z中除了a、e、i、o、u以外的字符

除此之外,Java中还定义了一些预定义字符

预定义字符 含义
. 任何字符
\d 数字字符
\D 非数字字符
\s 空格字符。 包括与[\ t \ n \ x0B \ f \ r]相同,即空格、标签、换行符、垂直标签、表单Feed、回车字符
\S 非空格字符
\w 一个字符,与[a-zA-Z0-9]相同
\W 非字字符,与[^\w]相同

表示次数的符号

符号 次数
* 0次或者多次
+ 1次或者多次
? 0次或者1次
{n} 恰好n次
{n,m} 从n次到m次

2、java 正则表达式模式

java.util.regex提供了三个类,支持正则表达式:

  • Pattern 表示正则表达式对象。一个Pattern表示一个正则表达式编译后的表现模式。
  • Matcher 一个Mactcher实例是一个状态机器。依据Pattern对象作为匹配模式进行字符串匹配。
  • PatternSyntaxException 一个非强制异常类,表示一个正则表达式中的语法错误。

正则表达式字符匹配流程:

首先,一个Pattern实例订制一个所用语法的正则表达式经过编译以后的表现模式。然后,一个Matcher实例利用Pattern实例的表现模式进行字符串匹配工作。

(1)Pattern类常用方法
	//将一个正则表达式编译并赋值给Pattern
 	public static Pattern compile(String regex) {
   
        return new Pattern(regex, 0);
    }

	/**
	*{@link #CASE_INSENSITIVE}, {@link #MULTILINE}, {@link #DOTALL},
     *         {@link #UNICODE_CASE}, {@link #CANON_EQ}, {@link #UNIX_LINES},
     *         {@link #LITERAL}, {@link #UNICODE_CHARACTER_CLASS}
     *         and {@link #COMMENTS}
	*/
	//将一个正则表达式编译并赋值给Pattern,并且增加指定flags,flags参数有以下几种。
    public static Pattern compile(String regex, int flags) {
   
        return new Pattern(regex, flags);
    }
    
    //得到flags值
	public int flags() {
   
        return flags;
    }

	//生成一个指定名字的Matcher对象
	public Matcher matcher(CharSequence input) {
   
        if (!compiled) {
   
            synchronized(this) {
   
                if (!compiled)
                    compile();
            }
        }
        Matcher m = new Matcher(this, input);
        return m;
    }

	//根据给定的正则表达式(pattern)编译后的表现模式对输入的字符串(input)进行匹配工作。
	//需要注意这个方法只适用于匹配一次,不需要得到Matcher对象的情况
	public static boolean matches(String regex, CharSequence input) {
   
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }
 
	//返回该对象所表达的正则表达式
	public String pattern() {
   
        return pattern;
    }

	//将目标字符串(input)按照给定的正则表达式(pattern)规则进行分割	
	public String[] split(CharSequence input) {
   
        return split(input, 0);
    }

    //作用同上,但是要求字符串分割为指定个数(limit)
    public String[] split(CharSequence input, int limit) {
   
        int index = 0;
        boolean matchLimited = limit > 0;
        ArrayList<String> matchList = new ArrayList<>();
        Matcher m = matcher(input);

        // Add segments before each match found
        while(m.find()) {
   
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值