微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式[ ]与( )中的一个妖怪问题

刚刚写正则表达式,又犯了个小错,想想中间相隔时间一长,每次写正则的时候都会被各种小问题坑一把,所以决定被坑一次记录一次。

今天的小问题所是()和[]

我想写一个或的表达式,用来判断是否是这几个词语中的一个。于是一开始用[ ],发现结果都是一些单个的字被匹配。当时脑子抽了,就没往括号上想,以为是里面的每个词语都需要被括起来,发现没用。

[震惊|愤怒|悲伤|感动|喜悦|幸福|无聊|可笑]

把最外面的[]改称()就可以了。

(震惊|愤怒|悲伤|感动|喜悦|幸福|无聊|可笑)

想想看之所以手贱犯了这样错误,并且没有在第一时间反应过来,还是没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的原因!!!!!!谢谢!!!

原文地址:https://www.jb51.cc/regex/360512.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐