Linux Shell正则表达式:[A-Za-z]* 为什么可以匹配所有的英文单词?

Sanlence 2015-04-11 12:22:33
[A-Za-z]*
这个正则表达式在我看来只是匹配A-Z里面0个或者n个字符或者a-z里面0个或者n个字符而已,为什么书上说可以匹配所有的单词呢?求高人解答
...全文
747 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
949724295 2015-09-19
  • 打赏
  • 举报
回复
同意2楼,正则表达式应以字符集的概念思考,书上说“*”符号是匹配前面一个普通字符的0次或多次重复,这句话的意思是“*”符号前面是只有一个字符的字符集,进一步说,含有多个字符的字符集“*”符号将匹配此字符集的任意一个字符0次或多次重复。
Sanlence 2015-04-12
  • 打赏
  • 举报
回复
引用 5 楼 loneking2001 的回复:
举个简单例子吧,假设字符串是 “yes no”,假设*为默认的贪婪模式。 第一次匹配为 “yes no”,yes 都在集合内,空格不在集合内,匹配失败; 第二次匹配为 ”yes n“,同样有空格失败; 第三次同样有空格失败; 第四次 ”yes“ 所有字符都在集合内,匹配成功。 如果是非贪婪模式,则第一次匹配 ”y“,成功,因为要最长匹配长度,所以会继续匹配 ”ye“,直到遇到空格时停止。
感觉明白你的意思了,[A-Za-z]*相当于[A-Za-z]个0或者n次重复,之前我一直认为应该是先匹配再重复匹配的字符。感谢你的回答,结贴了哈~~
Sanlence 2015-04-11
  • 打赏
  • 举报
回复
再接楼上的描述,我上面表述的不清楚,下面有加粗的部分是相比楼上添加的“相同的” [A-Za-z]* 这个正则表达式在我看来只是匹配A-Z里面0个或者n个相同的字符或者a-z里面0个或者n个相同的字符而已,为什么书上说可以匹配所有的单词呢?求高人解答
Sanlence 2015-04-11
  • 打赏
  • 举报
回复
引用 2 楼 loneking2001 的回复:
字符不必相同,应该把括号理解为一个集合,只有每次匹配时字符在这个集合内就批评成功。
想了一下,你的意思是不是用星号不断循环地匹配[]中的字符?
Sanlence 2015-04-11
  • 打赏
  • 举报
回复
引用 5 楼 loneking2001 的回复:
举个简单例子吧,假设字符串是 “yes no”,假设*为默认的贪婪模式。 第一次匹配为 “yes no”,yes 都在集合内,空格不在集合内,匹配失败; 第二次匹配为 ”yes n“,同样有空格失败; 第三次同样有空格失败; 第四次 ”yes“ 所有字符都在集合内,匹配成功。 如果是非贪婪模式,则第一次匹配 ”y“,成功,因为要最长匹配长度,所以会继续匹配 ”ye“,直到遇到空格时停止。
我在看书的时候,书上说星号是对前面字符或者集合的0次或者任意次重复,那么对于[A-Za-z]*,不是对[A-Za-z]中的一个字符任意次重复吗?比如[A-Za-z]中选择到的是a,那么后面加一个星号,应该得到的是aaaaa,a,aaa,aa......这样的单词,就按照你的yes no,第一个匹配到了y,那么接下来的e就不能匹配了吧?按照重复的思想的话,如果会匹配的话,应该是匹配yy,yyyyy, yyyy......这样重复的单词了。
Sanlence 2015-04-11
  • 打赏
  • 举报
回复
引用 2 楼 loneking2001 的回复:
字符不必相同,应该把括号理解为一个集合,只有每次匹配时字符在这个集合内就批评成功。
嗯,但是这样的话,不是只匹配这样的a, aa, bbbbbb, cc这样的吗?怎么可以匹配are,you这样的单词呢?
rayw0ng 2015-04-11
  • 打赏
  • 举报
回复
字符不必相同,应该把括号理解为一个集合,只有每次匹配时字符在这个集合内就批评成功。
rayw0ng 2015-04-11
  • 打赏
  • 举报
回复
举个简单例子吧,假设字符串是 “yes no”,假设*为默认的贪婪模式。 第一次匹配为 “yes no”,yes 都在集合内,空格不在集合内,匹配失败; 第二次匹配为 ”yes n“,同样有空格失败; 第三次同样有空格失败; 第四次 ”yes“ 所有字符都在集合内,匹配成功。 如果是非贪婪模式,则第一次匹配 ”y“,成功,因为要最长匹配长度,所以会继续匹配 ”ye“,直到遇到空格时停止。

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧