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

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

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

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

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

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

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

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

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...