java正则表达式中的分组

之前了解的regex中的()只是方便和?+ * |这类的符号的匹配以达到划分范围的目的。
比如说这个:"([+]|-)"
这个表达式匹配的是+-,而不是[+后跟着]-
如果是第二种意思得这么写"(\[+(])|-)"
这个例子很容易的就说明了[]中的意思和没有括号是不同的,以及括号的意思是用来划分范围,即分组

今天了解到这个括号还有一个其他的用途就是捕获。捕获就是为了解决"越来越牛逼"这种 ABAC型问题。

Pattern pattern=  Pattern.compile("(\\w).+\\1.+");

写法很简单\w的意思是[a-zA-Z0-9]
()代表了分组这里的\w第一个出现所以放在了第一组中
.+的意思匹配多个非/n的字符
\\1的意思是重复出现匹配第一组匹配成功后的信息
看懂了这些也就自然能理解为什么能匹配越来越牛逼了

分组有时候也会因相互嵌套而变得复杂起来,比如我想要表示信用卡的余额:
金额是有正有负的整数或小数,金额为正可以省略正号,甚至只写小数点后面两位也可以识别,于是就有了下面的正则表达式

"(([+]|-)?\\d+(.\\d{1,2})?)|(.\\d{1,2})"

“+12”;//成功
“-123”;//成功
“12.3”;//成功
" .12";//成功

“.”;//失败
“123.”;//失败
.123";//失败
“+.12”//失败

这个式子中的括号就看着比刚才的难多了,因为这时候出现了嵌套,那么这时候该怎么分组呢?
其实很简单
在这里插入图片描述
分别对1234号括号的内容进行捕获保存到了1234四个组中,不过这有引出了一个新的问题,有时候我只想用括号分个组并不需要捕获啊,这时候就引出了一个新的元字符(?: ··· )这时候()就代表着只分组不捕获的意思了。注意不要跟?搞混了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值