正则表达式中的字符集等概念

* 字符集:

使用中括号括住字符串来创建字符集(character set),可以匹配它包括的任意字符串。

eg: ’[a-zA-Z0-9]‘ 能匹配任意大小写字母和数字。

eg: '[^abc]'可以匹配除了a、b和c之外的字符


* 子模式:

使用圆括号括起需要的部分,或称子模式(subparttern)

eg: 'p(ython|erl)'可以匹配'python'或'perl'


* 可选项和重复子模式:

在子模式后面加上问号,它就变成了可选项。

下面这些运算符允许子模式重复多次:

(pattern)* : 允许模式重复0次或多次;

(pattern)+ : 允许模式重复1次或n次;

(pattern){m,n} : 允许模式重复m~n次。


* 贪婪模式和勉强模式:

>>Greedy(贪婪模式): 数量表示符默认采用贪婪模式,除非另有表示。贪婪模式的表达式会一直匹配下去,直到无法匹配为止。

如果你发现表达式匹配的结果与预期的不符,很有可能是因为——你以为表达式只会匹配前面几个字符,而实际上它是贪婪

模式,所以会一直匹配下去。

>>Relucant(勉强模式): 用问号后缀(?)表示,它只会匹配最少的字符。也称为最小匹配模式。

表1 两种模式的数量表示符
贪婪模式勉强模式说明
 X? X??  X表达式出现零次或一次
 X* X*? X表达式出现零次或多次
 X+ X+? X表达式出现一次或多次
 X{n} X{n}? X表达式出现n次
 X{n,} X{n,}? X表达式最少出现n次
 X{n,m} X{n,m}? X表达式最少出现n次,最多出现m次

关于贪婪模式和勉强模式的对比,看如下代码:

String str = "hello , java!";

System.out.println(str.replaceFirst("\\w*", "#"));  //输出 # , java!

//使用勉强模式,数量表示符(*)会尽量匹配最少字符,即匹配0个字符。

System.out.println(str.replaceFirst("\\w*?", "#"));  //输出 #hello  , java!     




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值