정규표현식 질문입니다!

다음과 같은 정규식이 있는데 이게 어떤걸 뜻하고 있는지 잘 모르겠습니다. 다음부분을 고쳐서 로그인을 했을 때만 이 페이지를 보여주려고하는데 해석 부탁드립니다!

소스코드

url(r'^(?P<code_id>[-\w]+)$',views.my_method)

2답변

  • 좋아요

    3

    싫어요
    채택취소하기

    장고의 urls파일인것 같은데요. 보통 이런 url은 app안에 들어있는 urls.py에 있으니까 app이름을 somename이라고 가정하고 설명할게요. 그리고 연결되는 method는 다음과 같이 views.my_method라고 가정하고 설명하겠습니다.

    url(r'^(?P<code_id>[-\w]+)$',views.my_method)
    

    이 때, mysite.com/somename/hi-123-hello 이라는 url요청이 들어오면 그걸 my_method에 전달하는데요. 이런 식으로 전달됩니다.

     views.my_method(request, code_id='hi-123-hello')
    

    my_method에서는** kwarg로 code_id를 받아오면 됩니다.

  • 질문하신 정규식은 ^(?P<code_id>[-\w]+)$ 입니다.

    ^는 문장의 시작을 뜻합니다.

    (?P<name>...) 형태는 ...에 매칭되는 그룹에 name이라는 이름을 붙여줍니다. 이 경우 code_id가 이름이 되겠네요.

    $는 문장의 끝을 뜻합니다.

    code_id에 매칭되는 패턴은 [-\w]+ 이네요.

    [...]는 문자의 집합을 나타냅니다. 이 집합에 들어간 문자는 -\w네요.

    \w는 단어를 나타내는 문자들 입니다. 알파벳 대소문자와 숫자와 언더스코어가 포함됩니다. 정규식으로는 [a-zA-Z0-9_]입니다.

    +는 앞서 나온 패턴이 1번 혹은 그 이상 반복된다는 뜻입니다.

    따라서 [-\w]+는 알파벳 대소문자, 숫자, 언더스코어, 하이픈이 한 글자 이상 반복되는 문자열에 매칭이 되겠네요.

    질문 주신 ^(P<code_id>[-\w]+)$는 문장의 시작부터 끝까지 알파벳 대소문자, 숫자, 언더스코어, 하이픈만으로 한 글자 이상 반복되는 문자열을 code_id라는 이름으로 매칭해주는 정규식이 되겠습니다.

    파이썬 정규식에 대한 자세한 내용은 https://docs.python.org/3/library/re.html 에 기술되어 있습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.