正则表达式[ ]与( )中的一个妖怪问题
刚刚写正则表达式,又犯了个小错,想想中间相隔时间一长,每次写正则的时候都会被各种小问题坑一把,所以决定被坑一次记录一次。 今天的小问题所是()和[] 我想写一个或的表达式,用来判断是否是这几个词语中的一个。于是一开始用[ ],发现结果都是一些单个的字被匹配。当时脑子抽了,就没往括号上想,以为是里面的每个词语都需要被括起来,发现没用。 [震惊|愤怒|悲伤|感动|喜悦|幸福|无聊|可笑] 把最外面的[]改称()就可以了。 (震惊|愤怒|悲伤|感动|喜悦|幸福|无聊|可笑) 想想看之所以手贱犯了这样错误,并且没有在第一时间反应过来,还是没iyou理解[]的意义。 所谓方括号,意思是这里面的所有各自字符构成的集合。如[abcd]就是一个字母,它将从一个集合{a,b,c,d}中取出。 所以[ab|cd|ef]的意思是有这样的一个4元素集合{a,b或者c,d或者e,f},然后在里面取一个元素 如果我加上括号,[[ab]|[cd]|[ef]]其实是一个只有一个元素的集合{(a或者b)或者(c或者d)或者(e或者f)}也就是{a或者b或者c或者d或者e或者f},但事实是这样吗?不是当[]存在[],且用|符号连接时,最后一个|的后面的整个部分会被忽略,即使最后的这部分本身没有[]。是不是很绕?但是我也没有想好解释的方法,姑且当作一个规律先记住吧。有谁知道原因请在评注里指点,谢谢。 我将我测试的例子留在这里: 例子1: 测试文本 ab ef gh cd 正则表达式 [[ab]|[cd]|[ef]|[gh]] 或 [[ab]|[cd]|[ef]|gh] 结果都是: 共找到6处匹配: a b e f c d 例子2: 测试文本 ab ef gh cd 正则表达式 [ab|cd|ef|gh] 结果都是: 共找到8处匹配: a b e f g h c d 最后正确的例子也给出: 正则表达式 (ab|cd|ef|gh) 结果都是: 共找到4处匹配: ab ef gh cd 谁能帮我解释一下例子1的原因!!!!!!谢谢!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |