正则表达式可选捕获组?
发布时间:2020-12-13 22:56:15 所属栏目:百科 来源:网络整理
导读:经过几个小时的搜索,我决定问这个问题.为什么这个正则表达式:^(dog). ?(猫)?不工作,因为我认为它应该工作(抓住第一只狗和猫,如果有)?我在这里缺少什么? dog,catdog,dog,dog 之所以你不能得到一个可选的猫不情愿的资格. ?它是可选的和非锚定的:发动机
经过几个小时的搜索,我决定问这个问题.为什么这个正则表达式:^(dog). ?(猫)?不工作,因为我认为它应该工作(抓住第一只狗和猫,如果有)?我在这里缺少什么?
dog,cat dog,dog,dog
之所以你不能得到一个可选的猫不情愿的资格. ?它是可选的和非锚定的:发动机不被迫进行匹配,因为它可以合法地将猫视为“尾巴”. ?序列.
如果您将猫锚定在字符串的末尾,即使用^(狗). ?(猫)?$,你会得到一个匹配,虽然: Pattern p = Pattern.compile("^(dog).+?(cat)?$"); for (String s : new String[] {"dog,cat","dog,dog"}) { Matcher m = p.matcher(s); if (m.find()) { System.out.println(m.group(1)+" "+m.group(2)); } } 打印(demo 1) dog cat dog cat dog null
您可以通过构建一个比猫以外的任何东西更复杂的表达来处理它,如下所示: ^(dog)(?:[^c]|c[^a]|ca[^t])+(cat)? 现在猫可以发生在字符串的任何地方,没有锚点(demo 2). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |