java 正则表达式matcher.group()匹配多种结果的规则 20

1,为什么他匹配的是整个的,而不是前三个字符。2,如果我把mat.group()改为mat.group(1)什么都不显示,是怎么回事... 1,为什么他匹配的是整个的,而不是前三个字符。
2,如果我把mat.group()改为mat.group(1)什么都不显示,是怎么回事
展开
 我来答
逆垳浌仙
2017-07-05 · TA获得超过177个赞
知道答主
回答量:58
采纳率:0%
帮助的人:34.5万
展开全部

这是由正则表达式的匹配策略所导致的,如果想要得到多个小的匹配结果你需要将正则表达式改为:

String reg = "乘+(.*?)+车";

即可得到想要的结果:

具体原理你可以查看这个链接:http://blog.csdn.net/luoweifu/article/details/42759439 讲的很详细

匿名用户
推荐于2017-09-11
展开全部
首先回答你第一个疑问,java正则默认贪婪匹配的,你括号中是.*,这样的表达式表示匹配0个或多个字符串,那么,正则肯定给你匹配到结尾那地方为止,解决方法:1、若具体知道乘车之间由多少个字符的话,用.{0,3},这样去表达,表示乘车之间最少0个字符,最多3个字符;2、搜一下非贪婪匹配怎么写
现在回答你第二个问题,如果你要要出所有的匹配字符串,建议使用while(mat.find()){String reuslt = mat.group()};这样的方式去找,除此之外那些方法我也是用的莫名奇妙的,不懂就不说了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yeda999
2017-08-29 · TA获得超过126个赞
知道小有建树答主
回答量:181
采纳率:100%
帮助的人:64.5万
展开全部
为什么他匹配的是整个的,而不是前三个字符。 贪婪比配,匹配最多的字符
如果需要改成非贪婪的模式reg="乘(.+?)车" 可以匹配到3个字符 ,再不明白,可以百度
group(1)不显示,你可以把括号后面的+去掉试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旗逸雅r7
2014-11-19 · TA获得超过195个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:110万
展开全部
public class RegExp{
    public static void main(String[] args) {
        Matcher matcher=Pattern.compile("乘+(.+)车").matcher("乘乘阿飞娃儿车,乘风微风车,的发生");
        while(matcher.find()){
            System.out.println(matcher.group(1));
        }
    }
}

你正则中第二个‘+’号什么意思啊?

追问
网上看的案例,我认为是字符串的+。

还有如果把 点后边的+改成?又什么都匹配不了了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fylsh
推荐于2018-05-08 · TA获得超过950个赞
知道小有建树答主
回答量:1472
采纳率:0%
帮助的人:1050万
展开全部

使用Reluctant 数量词

String reg="乘+(.*?)车";
while(m.find()){
  m.group(1);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式