免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4890 | 回复: 11
打印 上一主题 下一主题

请教正规表达式 $str =~ /^\./ 的解释 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-22 17:30 |只看该作者 |倒序浏览

这个正规表达式在遍历文件时过滤"."和".."及隐藏文件夹时使用。不过还是不太能理解。请指教。脚本如下,
sub find_log_files
{
    opendir(my $path, $_[0]) || die "open $_[0] fail : $!";
    my @files = readdir($path);
    foreach my $file (@files)
    {
        say $file;
        next if ($file =~ /^\./);

其它的不附上来了。

在正则表达式中,^指的是除外。那从字面上理解,$file =~ /^\./ 在文件(夹)名称为非.开头时,就会返回true。但实际运行时,结果恰恰相反。
这是为什么?

论坛徽章:
0
2 [报告]
发表于 2015-10-22 17:33 |只看该作者

另外,再请教如何判断文件或者文件夹是隐藏的,文件的测试条件中没有这一项。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2015-10-22 17:40 |只看该作者
本帖最后由 sunzhiguolu 于 2015-10-22 17:41 编辑

^ 是正则中的元字符
1.> 在正则的主体语言中表示匹配字符串的开始的位置 (在没有 m 修饰符的前提下)
2.> 在字符组中且紧跟在开口方括号的后面时表示排除型字符组 (即您文中描述的含义)

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2015-10-22 22:00 |只看该作者
linux 下 . 开头的就是隐藏文件,windows 下要用平台相关的模块

https://metacpan.org/pod/Win32::File
http://blog.chinaunix.net/uid-10697776-id-2935615.html

论坛徽章:
0
5 [报告]
发表于 2015-10-23 08:20 |只看该作者
sunzhiguolu 发表于 2015-10-22 17:40
^ 是正则中的元字符
1.> 在正则的主体语言中表示匹配字符串的开始的位置 (在没有 m 修饰符的前提下)
2.> ...


非常感谢。

论坛徽章:
0
6 [报告]
发表于 2015-10-23 08:22 |只看该作者
回复 4# zhlong8

非常感谢
   

论坛徽章:
0
7 [报告]
发表于 2015-10-23 08:44 |只看该作者
在脚本中增加use Win32::File;后,提示:
    Goto undefined subroutine &AutoLoader::AUTOLOAD at C:/Perl/lib/Win32/File.pm line 103.
在脚本中增加use AutoLoader 'AUTOLOAD';后,又提示
    Can't locate auto/Win32/File/GetAttribut.al in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at d:\MyProject\z_Perl\park_
analyze_plate_register.pl line 27.

这是为什么?


zhlong8 发表于 2015-10-22 22:00
linux 下 . 开头的就是隐藏文件,windows 下要用平台相关的模块

...

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2015-10-23 09:41 |只看该作者
回复 7# mimong_lin


    你的脚本里不要加 use AutoLoad 'AUTOLOAD'; 在 Perl/lib/Win32/File.pm 文件头加个 use AutoLoader;  不管行不行,贴个 perl -V 上来

论坛徽章:
0
9 [报告]
发表于 2015-10-23 10:24 |只看该作者
回复 8# zhlong8

加了后,如下,
Can't locate auto/Win32/File/autosplit.ix in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at C:/Perl/lib/AutoLoader.pm l
ine 181.
at C:/Perl/lib/Win32/File.pm line 10.

perl -V的结果如下:
Summary of my perl5 (revision 5 version 20 subversion 2) configuration:
   
  Platform:
    osname=MSWin32, osvers=5.2, archname=MSWin32-x86-multi-thread-64int
    uname=''
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='undef', ccflags =' -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields',
    optimize='-s -O2',
    cppflags='-DWIN32'
    ccversion='', gccversion='4.6.3', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='long long', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='undef', ldflags ='-s -static-libgcc -static-libstdc++ -L"C:\Perl\lib\CORE" -L"C:\MinGW\i686-w64-mingw32\lib"'
    libpth=C:\MinGW\i686-w64-mingw32\lib
    libs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
    perllibs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
    libc=, so=dll, useshrplib=true, libperl=libperl520.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-mdll -s -static-libgcc -static-libstdc++ -L"C:\Perl\lib\CORE" -L"C:\MinGW\i686-w64-mingw32\lib"'


Characteristics of this binary (from libperl):
  Compile-time options: HAS_TIMES HAVE_INTERP_INTERN MULTIPLICITY
                        PERLIO_LAYERS PERL_DONT_CREATE_GVSV
                        PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
                        PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS
                        PERL_MALLOC_WRAP PERL_NEW_COPY_ON_WRITE
                        PERL_PRESERVE_IVUV USE_64_BIT_INT USE_ITHREADS
                        USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
                        USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO
                        USE_PERL_ATOF USE_SITECUSTOMIZE
  Locally applied patches:
        ActivePerl Build 2002 [299195]
  Built under MSWin32
  Compiled at Jul 20 2015 13:29:53
  @INC:
    C:/Perl/site/lib
    C:/Perl/lib
    .

   

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
10 [报告]
发表于 2015-10-23 10:55 |只看该作者
回复 9# mimong_lin


    把填的那一行删了吧, 请贴个重现

在脚本中增加use Win32::File;后,提示:
    Goto undefined subroutine &AutoLoader::AUTOLOAD at C:/Perl/lib/Win32/File.pm line 103.

这个错误的最小脚本
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP