NAME

Regexp::Pattern::Path - Regexp patterns related to path

VERSION

This document describes version 0.003 of Regexp::Pattern::Path (from Perl distribution Regexp-Pattern-Path), released on 2020-01-03.

SYNOPSIS

 use Regexp::Pattern; # exports re()
 my $re = re("Path::dirname_unix");

DESCRIPTION

Regexp::Pattern is a convention for organizing reusable regex patterns.

PATTERNS

  • dirname_unix

    Valid directory name on Unix.

    Just like filename_unix but allows '.' and '..' (although strictly speaking '.' and '..' are just special directory names instead of regular ones).

    Examples:

     "foo" =~ re("Path::dirname_unix");  # matches
    
     "foo bar" =~ re("Path::dirname_unix");  # matches

    Too short.

     "" =~ re("Path::dirname_unix");  # doesn't match

    Too long.

     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" =~ re("Path::dirname_unix");  # doesn't match

    contains slash.

     "foo/bar" =~ re("Path::dirname_unix");  # doesn't match

    begins with slash.

     "/foo" =~ re("Path::dirname_unix");  # doesn't match

    ends with slash.

     "foo/" =~ re("Path::dirname_unix");  # doesn't match

    contains null (\0).

     "foo\0" =~ re("Path::dirname_unix");  # doesn't match
    
     "." =~ re("Path::dirname_unix");  # matches
    
     ".." =~ re("Path::dirname_unix");  # matches
    
     "..." =~ re("Path::dirname_unix");  # matches
  • filename_dos

    Valid filename on DOS (8.3/short filenames).

    The following rules are used in this pattern:

    1. Contains 1-8 characters, optionally followed by a period and 0-3 characters (extension).
    2. Valid characters include letters A-Z (a-z is also allowed in this regex), numbers 0-9, and the following special characters:

    _ underscore ^ caret $ dollar sign ~ tilde ! exclamation point # number sign % percent sign & ampersand hyphen (-) {} braces @ at sign ` single quote ' apostrophe () parentheses

    3. The name cannot be one of the following reserved file names: CLOCK$, CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, LPT4, NUL, and PRN.

    Examples:

     "FOO" =~ re("Path::filename_dos");  # matches

    Lowercase letters not allowed (convert your string to uppercase first if you want to accept lowercase letters).

     "foo" =~ re("Path::filename_dos");  # matches
    
     "FOOBARBA.TXT" =~ re("Path::filename_dos");  # matches

    Contains period other than as filename-extension separator.

     ".FOO.TXT" =~ re("Path::filename_dos");  # doesn't match

    Does not contain filename.

     ".TXT" =~ re("Path::filename_dos");  # doesn't match

    Empty.

     "" =~ re("Path::filename_dos");  # doesn't match

    Name too long.

     "FOOBARBAZ" =~ re("Path::filename_dos");  # doesn't match

    Extension too long.

     "FOOBARBA.TEXT" =~ re("Path::filename_dos");  # doesn't match

    reserved name CON.

     "CON" =~ re("Path::filename_dos");  # doesn't match
    
     "CONAUX" =~ re("Path::filename_dos");  # matches

    Starts with space.

     " FOO.BAR" =~ re("Path::filename_dos");  # doesn't match

    Contains space.

     "FOO .BAR" =~ re("Path::filename_dos");  # doesn't match
    
     "_\$!%-\@'^.~#&" =~ re("Path::filename_dos");  # matches
    
     "{}`()." =~ re("Path::filename_dos");  # matches

    Contains invalid character [ and ].

     "FILE[1].TXT" =~ re("Path::filename_dos");  # doesn't match
  • filename_unix

    Valid filename on Unix.

    Length must be 1-255 characters. The only characters not allowed include "\0" (null) and "/" (forward slash, for path separator). Also cannot be '.' or '..'.

    Examples:

     "foo" =~ re("Path::filename_unix");  # matches
    
     "foo bar" =~ re("Path::filename_unix");  # matches

    Too short.

     "" =~ re("Path::filename_unix");  # doesn't match

    Too long.

     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" =~ re("Path::filename_unix");  # doesn't match

    contains slash.

     "foo/bar" =~ re("Path::filename_unix");  # doesn't match

    begins with slash.

     "/foo" =~ re("Path::filename_unix");  # doesn't match

    ends with slash.

     "foo/" =~ re("Path::filename_unix");  # doesn't match

    contains null (\0).

     "foo\0" =~ re("Path::filename_unix");  # doesn't match

    Cannot be ".".

     "." =~ re("Path::filename_unix");  # doesn't match

    Cannot be "..".

     ".." =~ re("Path::filename_unix");  # doesn't match
    
     "..." =~ re("Path::filename_unix");  # matches
  • filename_windows

    Valid filename on Windows (long filenames).

    The following rules are used in this pattern:

    1. Contains 1-260 characters (including extension).
    2. Does not contain the characters \0, [\x01-\x1f], <, >, :, ", /, \, |, ?, *.
    3. The name cannot be one of the following reserved file names: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
    4. Does not end with a period.
    5. Does not begin with a period.
    6. Cannot be '.' or '..'.

    References: - https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file

    Examples:

    Empty.

     "" =~ re("Path::filename_windows");  # doesn't match
    
     "FOO" =~ re("Path::filename_windows");  # matches
    
     "foo" =~ re("Path::filename_windows");  # matches
    
     "FOOBARBA.TXT" =~ re("Path::filename_windows");  # matches

    Starts with period.

     ".FOO.TXT" =~ re("Path::filename_windows");  # doesn't match

    Ends with period.

     "bar." =~ re("Path::filename_windows");  # doesn't match

    reserved name CON.

     "CON" =~ re("Path::filename_windows");  # doesn't match

    reserved name LPT3.

     "LPT3" =~ re("Path::filename_windows");  # doesn't match
    
     "CONAUX" =~ re("Path::filename_windows");  # matches
    
     "FOO .BAR" =~ re("Path::filename_windows");  # matches
    
     "foo[1].txt" =~ re("Path::filename_windows");  # matches
    
     "foo(2).txt" =~ re("Path::filename_windows");  # matches

    Contains invalid character \0.

     "foo\0" =~ re("Path::filename_windows");  # doesn't match

    Contains control character.

     "foo\b" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid character /.

     "foo/bar" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid characters <>.

     "foo<bar>" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid character :.

     "foo:bar" =~ re("Path::filename_windows");  # doesn't match
    
     "foo's file" =~ re("Path::filename_windows");  # matches

    Contains invalid character ".

     "foo \"bar\"" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid character \.

     "foo\\bar" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid character |.

     "foo|bar" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid character ?.

     "foo?" =~ re("Path::filename_windows");  # doesn't match

    Contains invalid character *.

     "foo*" =~ re("Path::filename_windows");  # doesn't match

    Too long.

     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" =~ re("Path::filename_windows");  # doesn't match

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Regexp-Pattern-Path.

SOURCE

Source repository is at https://github.com/perlancar/perl-Regexp-Pattern-Path.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Regexp-Pattern-Path

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

SEE ALSO

Regexp::Pattern

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2020 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.