如何在文件测试操作符上使用正则表达式

Tre*_*ree 1 perl

可能重复:
与-e匹配的文件名和perl中的正则表达式.

对于前

if(-e/home/tree/a*){print"file found"}

如何在文件测试操作符上使用正则表达式

JB.*_*JB. 5

您不能在文件存在测试运算符上使用正则表达式.

如果要使用正则表达式检查存在的文件名,则必须使用eg readdirglob(请注意glob具有轻量级语法</home/tree/*>)检索文件列表,然后使用正则表达式对其进行过滤.

请注意,在您的情况下,您使用的"表达式" /home/tree/a*可以解释为glob模式而不是正则表达式.如果这是你想要的,你可以直接使用glob,如:

if ( () = </home/tree/a*> ) { print "file found" }
Run Code Online (Sandbox Code Playgroud)

有关为何/如何不用glob作测试条件的讨论,请参阅注释.

  • 不要*在这样的标量上下文中使用glob.如果你把它放在一个循环中并且只有一个*文件,你将看到它失败的一半时间.你可以做`if(()= </ home/tree/a*>)` (4认同)
  • 这不是一个好的解决方案,因为在标量上下文中调用时glob会保留状态.如果/ home/tree中有三个以"a"开头的文件,那么第四次遇到这个if语句时,布尔测试将评估为false. (3认同)