加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 01:21:06 所属栏目:百科 来源:网络整理
导读:刚刚写正则表达式,又犯了个小错,想想中间相隔时间一长,每次写正则的时候都会被各种小问题坑一把,所以决定被坑一次记录一次。 今天的小问题所是()和[] 我想写一个或的表达式,用来判断是否是这几个词语中的一个。于是一开始用[ ],发现结果都是一些单个

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

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读