PHP 8.2.30
Preview: fnmatch.py Size: 6.04 KB
//opt/alt/python313/lib64/python3.13/fnmatch.py

"""Filename matching with shell patterns.

fnmatch(FILENAME, PATTERN) matches according to the local convention.
fnmatchcase(FILENAME, PATTERN) always takes case in account.

The functions operate by translating the pattern into a regular
expression.  They cache the compiled regular expressions for speed.

The function translate(PATTERN) returns a regular expression
corresponding to PATTERN.  (It does not compile it.)
"""
import os
import posixpath
import re
import functools

__all__ = ["filter", "fnmatch", "fnmatchcase", "translate"]

def fnmatch(name, pat):
    """Test whether FILENAME matches PATTERN.

    Patterns are Unix shell style:

    *       matches everything
    ?       matches any single character
    [seq]   matches any character in seq
    [!seq]  matches any char not in seq

    An initial period in FILENAME is not special.
    Both FILENAME and PATTERN are first case-normalized
    if the operating system requires it.
    If you don't want this, use fnmatchcase(FILENAME, PATTERN).
    """
    name = os.path.normcase(name)
    pat = os.path.normcase(pat)
    return fnmatchcase(name, pat)

@functools.lru_cache(maxsize=32768, typed=True)
def _compile_pattern(pat):
    if isinstance(pat, bytes):
        pat_str = str(pat, 'ISO-8859-1')
        res_str = translate(pat_str)
        res = bytes(res_str, 'ISO-8859-1')
    else:
        res = translate(pat)
    return re.compile(res).match

def filter(names, pat):
    """Construct a list from those elements of the iterable NAMES that match PAT."""
    result = []
    pat = os.path.normcase(pat)
    match = _compile_pattern(pat)
    if os.path is posixpath:
        # normcase on posix is NOP. Optimize it away from the loop.
        for name in names:
            if match(name):
                result.append(name)
    else:
        for name in names:
            if match(os.path.normcase(name)):
                result.append(name)
    return result

def fnmatchcase(name, pat):
    """Test whether FILENAME matches PATTERN, including case.

    This is a version of fnmatch() which doesn't case-normalize
    its arguments.
    """
    match = _compile_pattern(pat)
    return match(name) is not None


def translate(pat):
    """Translate a shell PATTERN to a regular expression.

    There is no way to quote meta-characters.
    """

    STAR = object()
    parts = _translate(pat, STAR, '.')
    return _join_translated_parts(parts, STAR)


def _translate(pat, STAR, QUESTION_MARK):
    res = []
    add = res.append
    i, n = 0, len(pat)
    while i < n:
        c = pat[i]
        i = i+1
        if c == '*':
            # compress consecutive `*` into one
            if (not res) or res[-1] is not STAR:
                add(STAR)
        elif c == '?':
            add(QUESTION_MARK)
        elif c == '[':
            j = i
            if j < n and pat[j] == '!':
                j = j+1
            if j < n and pat[j] == ']':
                j = j+1
            while j < n and pat[j] != ']':
                j = j+1
            if j >= n:
                add('\\[')
            else:
                stuff = pat[i:j]
                if '-' not in stuff:
                    stuff = stuff.replace('\\', r'\\')
                else:
                    chunks = []
                    k = i+2 if pat[i] == '!' else i+1
                    while True:
                        k = pat.find('-', k, j)
                        if k < 0:
                            break
                        chunks.append(pat[i:k])
                        i = k+1
                        k = k+3
                    chunk = pat[i:j]
                    if chunk:
                        chunks.append(chunk)
                    else:
                        chunks[-1] += '-'
                    # Remove empty ranges -- invalid in RE.
                    for k in range(len(chunks)-1, 0, -1):
                        if chunks[k-1][-1] > chunks[k][0]:
                            chunks[k-1] = chunks[k-1][:-1] + chunks[k][1:]
                            del chunks[k]
                    # Escape backslashes and hyphens for set difference (--).
                    # Hyphens that create ranges shouldn't be escaped.
                    stuff = '-'.join(s.replace('\\', r'\\').replace('-', r'\-')
                                     for s in chunks)
                # Escape set operations (&&, ~~ and ||).
                stuff = re.sub(r'([&~|])', r'\\\1', stuff)
                i = j+1
                if not stuff:
                    # Empty range: never match.
                    add('(?!)')
                elif stuff == '!':
                    # Negated empty range: match any character.
                    add('.')
                else:
                    if stuff[0] == '!':
                        stuff = '^' + stuff[1:]
                    elif stuff[0] in ('^', '['):
                        stuff = '\\' + stuff
                    add(f'[{stuff}]')
        else:
            add(re.escape(c))
    assert i == n
    return res


def _join_translated_parts(inp, STAR):
    # Deal with STARs.
    res = []
    add = res.append
    i, n = 0, len(inp)
    # Fixed pieces at the start?
    while i < n and inp[i] is not STAR:
        add(inp[i])
        i += 1
    # Now deal with STAR fixed STAR fixed ...
    # For an interior `STAR fixed` pairing, we want to do a minimal
    # .*? match followed by `fixed`, with no possibility of backtracking.
    # Atomic groups ("(?>...)") allow us to spell that directly.
    # Note: people rely on the undocumented ability to join multiple
    # translate() results together via "|" to build large regexps matching
    # "one of many" shell patterns.
    while i < n:
        assert inp[i] is STAR
        i += 1
        if i == n:
            add(".*")
            break
        assert inp[i] is not STAR
        fixed = []
        while i < n and inp[i] is not STAR:
            fixed.append(inp[i])
            i += 1
        fixed = "".join(fixed)
        if i == n:
            add(".*")
            add(fixed)
        else:
            add(f"(?>.*?{fixed})")
    assert i == n
    res = "".join(res)
    return fr'(?s:{res})\Z'

Directory Contents

Dirs: 34 × Files: 154

Name Size Perms Modified Actions
asyncio DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:09:23
Edit Download
ctypes DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
curses DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
dbm DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
email DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
encodings DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
ensurepip DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
html DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
http DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
importlib DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
json DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
logging DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
pathlib DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
re DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
sqlite3 DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
sysconfig DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
tomllib DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
unittest DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
urllib DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
venv DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
wsgiref DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
xml DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
xmlrpc DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
zipfile DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
zoneinfo DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
_pyrepl DIR
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
- drwxr-xr-x 2026-02-10 08:06:26
Edit Download
6.38 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
500 B lrw-r--r-- 2026-01-10 10:38:56
Edit Download
99.28 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
63.81 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
21.54 KB lrwxr-xr-x 2026-01-10 10:38:56
Edit Download
35.25 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
3.34 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
11.69 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
25.47 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
14.96 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
12.86 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
36.11 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
5.69 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
3.97 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
20.18 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
52.57 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
27.15 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
129 B lrw-r--r-- 2026-01-10 10:39:00
Edit Download
8.76 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
7.44 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
6.48 KB lrwxr-xr-x 2026-01-10 10:38:55
Edit Download
18.73 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
63.03 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
268 B lrw-r--r-- 2026-01-10 10:39:01
Edit Download
2.73 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
81.41 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
40.00 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
106.85 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
83.59 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
10.40 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
15.35 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
6.04 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
39.15 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
33.92 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
38.15 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
6.10 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
7.31 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
6.09 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
21.03 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
19.44 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
9.42 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
24.06 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
9.22 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
22.48 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
7.54 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
53.07 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
125.63 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
3.50 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
79.74 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
1.05 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
13.49 KB lrw-r--r-- 2025-12-05 16:06:33
Edit Download
7.11 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
77.18 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
13.08 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
79.73 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
23.29 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
23.23 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
6.87 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
30.16 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
2.32 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
11.49 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
2.76 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
10.72 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
58.95 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
40.65 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
89.84 KB lrwxr-xr-x 2026-01-10 10:38:56
Edit Download
65.39 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
91.85 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
17.85 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
46.25 KB lrwxr-xr-x 2026-01-10 10:38:56
Edit Download
29.33 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
14.26 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
17.81 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
23.59 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
22.61 KB lrwxr-xr-x 2026-01-10 10:38:56
Edit Download
28.61 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
5.99 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
11.13 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
107.58 KB lrwxr-xr-x 2026-01-10 10:38:56
Edit Download
7.65 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
13.14 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
7.03 KB lrwxr-xr-x 2026-01-10 10:39:00
Edit Download
36.14 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
7.88 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
7.73 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
12.58 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
6.20 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
1.94 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
19.00 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
8.60 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
13.04 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
56.12 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
2.44 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
24.96 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
42.90 KB lrwxr-xr-x 2026-01-10 10:38:55
Edit Download
36.87 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
27.41 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
231 B lrw-r--r-- 2026-01-10 10:38:55
Edit Download
232 B lrw-r--r-- 2026-01-10 10:38:55
Edit Download
229 B lrw-r--r-- 2026-01-10 10:38:56
Edit Download
51.47 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
6.00 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
60.72 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
11.51 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
12.61 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
257 B lrw-r--r-- 2026-01-10 10:38:56
Edit Download
88.70 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
13.87 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
11.27 KB lrwxr-xr-x 2026-01-10 10:39:00
Edit Download
111.74 KB lrwxr-xr-x 2026-01-10 10:38:55
Edit Download
31.65 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
19.49 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
1003 B lrw-r--r-- 2026-01-10 10:38:56
Edit Download
54.05 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
13.16 KB lrwxr-xr-x 2026-01-10 10:38:55
Edit Download
2.43 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
21.06 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
29.03 KB lrwxr-xr-x 2026-01-10 10:38:55
Edit Download
65.00 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
17.62 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
1.99 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
10.94 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
130.14 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
28.77 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
26.44 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
22.71 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
21.01 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
23.73 KB lrwxr-xr-x 2026-01-10 10:39:00
Edit Download
8.42 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
32.12 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
3.93 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
6.90 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
2.20 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
31.85 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
3.00 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
8.53 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
5.55 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
2.61 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
14.31 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
9.05 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
21.51 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
89.83 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
222.19 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
91.61 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
11.55 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
6.04 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
3.05 KB lrw-r--r-- 2026-01-10 10:38:56
Edit Download
33.92 KB lrw-r--r-- 2026-01-10 10:39:00
Edit Download
65.88 KB lrw-r--r-- 2026-01-10 10:39:50
Edit Download
65.90 KB lrw-r--r-- 2026-01-10 10:43:38
Edit Download
4.26 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
5.75 KB lrw-r--r-- 2026-01-10 10:38:55
Edit Download
5.10 KB lrw-r--r-- 2026-01-10 10:39:01
Edit Download
227 B lrw-r--r-- 2026-01-10 10:39:01
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).