perl中的正则表达式(不是字符串)

时间:2015-02-28 10:41:28

标签: regex perl

好的,我有以下文件:

total 32
drwxr-xr-x  12 al  staff   408B Feb 28 11:36 ./
drwxr-xr-x+ 40 al  staff   1.3K Feb 28 10:07 ../
drwxr-xr-x   3 al  staff   102B Oct 19 20:38 Install OS X Yosemite.app/
-rw-r--r--   1 al  staff     7B Dec 15 13:35 file1
-rw-r--r--   1 al  staff     4B Dec 15 13:35 file2
-rw-r--r--   1 al  staff    11B Dec 15 13:35 file3.part
-rw-r--r--   1 al  staff     0B Feb 28 11:36 file4.art
-rwxr-xr-x   1 al  staff   1.9K Feb 28 11:35 show.pl*
drwxr-xr-x   2 al  staff    68B Feb 28 10:07 test1/
drwxr-xr-x   6 al  staff   204B Feb 28 10:12 test2/
drwxr-xr-x   3 al  staff   102B Feb 28 10:07 test3/
drwxr-xr-x   3 al  staff   102B Feb 28 10:12 test4/

现在我需要一个可以执行以下操作的正则表达式:

以字符串.part结尾的任何类型 NOT 的3个或更多字符(省略。和..)(但以其他任何结尾都可以)。

以下几乎可以使用,但它不会匹配.app和.art(它应该)。

print $file =~ m/^.{3,}[^(\.part)]$/i;

当我说的时候请相信我......我已经尝试过了(为了一个漫长的时间)

1 个答案:

答案 0 :(得分:0)

您需要在开始时使用否定前瞻断言。

print $file =~ m/^(?!.*\.part$).{3,}/i;

DEMO

断言要匹配的字符串最后不包含.part字符串。如果是,则匹配具有三个或更多字符的字符串。 $声称我们已经结束了。