URL 내부의 매개변수
Flask에서는 <>을 이용해 url로 변수를 받을 수 있다. 원하는 위치에 <반환 타입:변수명> 나 <변수명> 을 적어주면 되는데, 타입을 명시하지 않은 경우 기본 string형으로 받아온다. 사용할 수 있는 타입으로는 아래와 같다. 이 중에서 path 타입에 대해 좀 더 알아보려고 한다.
| 타입 Converter | 설명 | 정규표현식 표현 | 
|---|---|---|
| string UnicodeConverter | 기본값. 슬래시(/)를 제외한 모든 문자 | [^/]{minlength, maxlength} | 
| any AnyConverter | 여러 값의 조합 | '(?:%s)' % '|'.join([re.escape(x) for x in items]) | 
| path PathConverter | string과 비슷하지만 슬래시를 포함 | [^/].*? | 
| int IntegerConverter | 양의 정수 | r'\d+' | 
| float FloatConverter | 양의 부동 소수점 값 | r'\d+\.\d+' | 
| uuid UUIDConverter | 범용 고유 식별자 | r'[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-' \r'[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}' | 
PathConverter의 정규표현식
werkzeug.routing의 PathConverter 코드는 아래와 같다. — 참고
class PathConverter(BaseConverter):
 
    """Like the default :class:`UnicodeConverter`, but it also matches
    slashes.  This is useful for wikis and similar applications::
 
        Rule('/<path:wikipage>')
        Rule('/<path:wikipage>/edit')
 
    :param map: the :class:`Map`.
    """
    regex = '[^/].*?'
    weight = 200여기서 우리는 11행의 regex만 보면 된다. 의미는 아래와 같다.
[^/] : 슬래시를 포함하지 않는 문자 중,
. : 줄바꿈 문자를 제외한 모든 문자를
* : 0개 이상 찾아라
? : 가능한 최소로
가능한 최소, non-greedy
결과로 구분하면 쉽게 알 수 있다.
/hello/flask/ 문자열이 주어졌을 때,
- 
[^/].*/hello/flask/ 
- 
[^/].*?/hello/flask/ 
BaseConverter의 정규표현식
BaseConverter의 정규식은 [^/]{minlength(>= 1), maxlength} 이다. 최대 길이가 주어지지 않은 경우 [^/]{1,} 가 된다. 의미는 아래와 같다.
[^/] : 슬래시를 포함하지 않는 문자 중,
{minlength, maxlength} : minlength개 이상 maxlength개 이하로 찾아라
BaseConverter vs. PathConverter
BaseConverter와 PathConverter의 가장 큰 차이는 슬래시 포함 여부이다.
정규표현식의 차이로는 아래 이미지를 보면 쉬울 것이다.

둘 다 정규표현식은 슬래시를 포함하지 않지만, 아마도 Converter나 다른 메소드가 추가적인 작업을 해주는 것 같다. (고 생각한다.)
