java中正则表达式中非捕获组的一些问题

请问1、(?:X)和(?>X)这两者分别表示什么,有什么关系?2、求一个正则表达式的写法,可以匹配比如说:开始和结尾分别是dog和cat,但是中间位置上不能有pig... 请问
1、(?:X)和(?>X)这两者分别表示什么,有什么关系?
2、求一个正则表达式的写法,可以匹配比如说:开始和结尾分别是dog和cat,但是中间位置上不能有pig
展开
 我来答
albumin
2014-04-04 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2371万
展开全部
(?:X)是非捕获组,也就是X不单独作为一个分组提取出来,不能用match.group(num) 这样的语法提取出来,num指数字1-9
(?>X)是原子分组,没用过,一般正则的规则是尽可能的匹配,比如 ([0-9]+)5 这个正则可以匹配“12345"这个字符串,因为[0-9]+虽可以匹配所有的数字,但为了匹配数字5必须回溯一位,[0-9]+匹配1234,如果正则是(?>[0-9]+)5则是不回溯的,不匹配。
2、求一个正则表达式的写法,可以匹配比如说:开始和结尾分别是dog和cat,但是中间位置上不能有pig
^dog((?!pig).)*cat$
追问
哥们儿,你的正则表达式学的太屌了,但是我这个^dog((?!pig).)*cat$并没有完全理解,你能和我详细讲讲么?
追答
这个正则的关键是中间的子正则((?!pig).)*,这个可以理解为0-n个"(?!pig)."重复,也就是((?!pig).(?!pig).(?!pig).(?!pig).(?!pig).……(?!pig).)这种形式,(?!pig)表示其后不能是pig,点匹配任意一个字符,这个子正则的开始跟的不能是pig,第一个字符后面不能是pig,第二个字符后不能是pig…………,依此类推。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式