my @file = grep { (/\.EW/i || /\.NS/i || /\.UD/i) }readdir(DIR);
Run Code Online (Sandbox Code Playgroud)
我试图理解正则表达式以及grep和readdir如何相互关联.
readdir返回DIR中的文件列表,其中DIR是目录的句柄.
grep {}正在将regexp应用于它看到的每个值,匹配的任何内容都放在@files中.
正则表达式本身在文件名中匹配".EW",".NS"或".US",不区分大小写.(为清晰起见,引用是我的).
它,而冗长,过滤器基于是否有期,其后无论是序列目录中的所有文件名'EW','NS'或'UD'在一个文件的名称,没有参考案例.(/i:"忽略大小写").
它做同样的事情:
my @files = grep { /\.(?:ew|ns|ud)/i } readdir(DIR);
Run Code Online (Sandbox Code Playgroud)
然而,它也将允许文件名,其中这些序列是不扩展,而是开始一个的节点中的文件名.这些类型的文件名有时在*nix环境中更常见:( file.ew.action.ext).但请注意,我说开始(ht到ikegami),所以它匹配file.nst,file.nsx等等.因此,如果这些是*扩展,那么最好执行以下操作:
/\.(?:ew|ns|ud)$/i
Run Code Online (Sandbox Code Playgroud)
$ 指示字符串的结尾(或记录分隔符之前).
即使你想保持全范围的行为,并希望所有的扩展开始与这些序列,这是更好地使之明确,并写这样的表达:/\.(?:ew|ns|ud)\w*$/(\w*意思是0或多个"单词字符"(字母,数字+下划线)).
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |