java查找所有匹配的字符串_Java查找一個字符串中所有匹配某正則的子串

代碼如下:

String line = "2016年10月11日我們去哪里玩近期我們近日,次年,同年等等,10月,2019年,3月4日"

Pattern datePattern = Pattern.compile("\\d{4}年\\d{1,2}月\\d{1,2}日|\\d{4}年\\d{1,2}月|\\d{1,2}月\\d{1,2}日|\\d{4}年|\\d{1,2}月|同年|次年|近日|近期");

Matcher dateMatcher = datePattern.matcher(line);

int dateCount = 0;

while(dateMatcher.find()) {

System.out.println(dateMatcher.group());

++dateCount;

}如上代碼是查找,字符串中所有匹配:年月日、年、年月、月、月日、同年、次年、近日、近期的子串

這里涉及到貪婪匹配或者非貪婪匹配,好像跟正則的順序有關,如上,我將長匹配的放在了前面,即先是 年月日,年月,月日,年,月等。我是按照這樣的順序放置正則,所以可以實現貪婪匹配。

此外:

假如有如下字符串

String line = "[[444444444444],[5555555555555]]";

我要將每個[ ]中字符串單獨取出來,可以采用如下正則

Pattern categoryPattern = Pattern.compile("\\[\".*?\"\\]"); //加一個問號后就是非貪婪匹配注意:上述如果沒有那個?號就是貪婪正則,這一只會匹配到最外層的,即只會匹配到一個,但是加了問號就變成了非貪婪,就可以實現正確的匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值