边学find边在学正则表达式但发现find的正则表达式有点不同
find . -type -f -regextype posix-extended -regex ".*\^a{1,2}.txt"想查找当前目录下a开头的后匹配1-2个字符的.txt文件,最后一个都没有匹配出来,换成".*\a[0-9]{1,2}.txt"就可以匹配到,另外用".*\a{1,2}.txt"匹配到是emoji-data.txt(不知道这个文件是怎么匹配出来的)麻烦各位大佬帮我解疑,find的正则表达式网上教程少得可怜,有没有推荐的书或者教程下载,感谢感谢
find posix-extended正则表达疑问
-
- 帖子: 94
- 注册时间: 2010-01-08 13:09
- astolia
- 论坛版主
- 帖子: 6459
- 注册时间: 2008-09-18 13:11
Re: find posix-extended正则表达疑问
拿30分钟正则表达式教程里的内容就足以解答你的疑问了,先把基础学好吧
用find .搜出来的路径是./XXXX这样的,-regex是匹配整个路径,这两点你应该知道了。那么来看一下你写的正则是什么个鬼东西
\^:转义^,使其不再匹配字符串开头,而是匹配字符^
a{1,2}:匹配a或aa
.:匹配任意一个字符
txt:匹配txt
连起来看就是,匹配以^aaXtxt或^aXtxt结尾的路径,其中X代表任意字符
所以这个正则能够匹配./^a.txt、./^aa.txt、./^abtxt、./123^abtxt等等文件
.*:匹配任意长度的任意字符
\a:转义a,错误写法,无意义。匹配字符a
[0-9]{1,2}:匹配1个或2个0-9的字符
.:匹配任意一个字符
txt:匹配txt
连起来看就是,匹配以aNXtxt或aNNXtxt结尾的路径,其中N代表0-9中的字符,X代表任意字符
所以这个正则能够匹配./a1.txt、./a12.txt、./a1atxt、./a12txt、./abca12txt等等文件
emoji-data.txt符合aXtxt模式
符合你需求的正则写法是
自己分析一下为什么
按Page Down键翻到8.5章就是
用find .搜出来的路径是./XXXX这样的,-regex是匹配整个路径,这两点你应该知道了。那么来看一下你写的正则是什么个鬼东西
.*:匹配任意长度的任意字符串
\^:转义^,使其不再匹配字符串开头,而是匹配字符^
a{1,2}:匹配a或aa
.:匹配任意一个字符
txt:匹配txt
连起来看就是,匹配以^aaXtxt或^aXtxt结尾的路径,其中X代表任意字符
所以这个正则能够匹配./^a.txt、./^aa.txt、./^abtxt、./123^abtxt等等文件
再来看这个
.*:匹配任意长度的任意字符
\a:转义a,错误写法,无意义。匹配字符a
[0-9]{1,2}:匹配1个或2个0-9的字符
.:匹配任意一个字符
txt:匹配txt
连起来看就是,匹配以aNXtxt或aNNXtxt结尾的路径,其中N代表0-9中的字符,X代表任意字符
所以这个正则能够匹配./a1.txt、./a12.txt、./a1atxt、./a12txt、./abca12txt等等文件
同样的,这个正则匹配以aXtxt或aaXtxt结尾的路径,其中X代表任意字符
emoji-data.txt符合aXtxt模式
符合你需求的正则写法是
代码: 全选
\./a.{1,2}\.txt
代码: 全选
info find
-
- 帖子: 94
- 注册时间: 2010-01-08 13:09
Re: find posix-extended正则表达疑问
谢谢版主,太详细了,\./a.{1,2}\.txt,用\转义.防止变成特殊符号.匹配任意字符,./a.{1,2}是当前路径下a开头最多后面匹配2个字符,再用\.转义.变成.txt后缀文件名,但是版主我始终用^无法匹配,这个该怎么书写???
- astolia
- 论坛版主
- 帖子: 6459
- 注册时间: 2008-09-18 13:11
-
- 帖子: 94
- 注册时间: 2010-01-08 13:09
Re: find posix-extended正则表达疑问
谢谢版主,又学到新知识了