2016-09-14 4 views
1

Django 1.10의 튜토리얼에서는 정규 표현식의 기본 사항을 잘 알고 있지만 정규 표현식이 동적 링크를 생성하는 방법에 대해서는 자세히 설명하지 않습니다.Django 튜토리얼의 Regex 해석

url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), 

누군가가 정규식 해석하는 방법에 대해 자세히 다루지 수 : 나는 여론 조사/urls.py에서이 특정 조각을보고 있어요? 캡처 그룹 시작 부분의 한정 기호 인 (?P<question_id>은 나에게 의미가 없습니다. 특히, 장고는 <question_id>이 외래 키임을 어떻게 알 수 있습니까?

+0

'(? P ...)는 "명명 된 캡처"그룹의 구문 일뿐입니다. 캡처 그룹에 인덱스를 사용하는 대신 이름을 사용할 수 있습니다. 분명히'? '는 여기에 한정어가 아닙니다. –

답변

2

(?P<question_id>.*)은 괄호 안에있는 정규 표현식에 의해 캡처 된 모든 question_id라고 명명 된 그룹에있을 것입니다 말한다. 직접 처리 할 수 ​​있습니다. 따라서 정규식은 외래 키 또는 그와 유사한 것으로는 알지 못합니다. 그냥 question_id이라는 그룹이 있습니다. 괄호는 들어오는 문자열에서 실제로 일치하지 않습니다.

[0-9]+은 1 자리 이상의 숫자 문자열과 일치합니다.

^은 문자열의 시작입니다. $은 문자열의 끝입니다. ^, $, (?P<question_id>, and)은 다소 메타이며 문자열의 위치와 정규식 추출 된 그룹을 참조하는 방법만큼 문자열의 영향을받지 않습니다.

캡처 된 그룹은 키워드 인수로보기 (이 경우 세부 정보)로 전달되며 의미있는 방식으로보기에 사용됩니다.

+0

설명해 주셔서 고마워요. 그렇다면 'question_id'라는 이름을 임의로 지정하고 정규식 문장에 '중요하지 않습니다'라는 뜻입니까? –

+0

답변에 메모를 추가했습니다. 관점에서 전달되는 키워드 인수라는 의미에서 의미가 있습니다. 변경 한 경우 다른 키워드 arg가보기로 전달됩니다. 보기와 URL이 키워드에 동의하는 한 계속 작동합니다. – nephlm

+0

끝내 주셔서 감사합니다. –

0

(?P<name>...)이 정규 표현식에 넘버링 포획 기이다 (...) 구문 달리 라는 캡처 그룹을 가지고 있다는 것을 의미한다. Django는 명명 된 매개 변수를 가져 와서 뷰에 전달합니다.

0

^(?P<question_id>[0-9]+)/$

^ assert position at start of the string 
(?P<question_id>[0-9]+) Named capturing group "question_id" 
    [0-9]+ match a single character present in the list below: 

     Quantifier: + Between one and unlimited times, as many times as possible, 
     giving back as needed [greedy] 
     0-9 a single character in the range between 0 and 9 

$ assert position at end of the string 

데모 및 자세한 설명 : https://regex101.com/r/zV3rZ1/1

0

[0-9] +를 question_id 이름으로 캡처합니다. 그런 다음 캡처 된 숫자를 매개 변수로 뷰 함수에 전달합니다. 당신은 다시 기능으로 그것을 시도 할 수 있습니다. 그것은 장고 특유의 것이 아닙니다.

>>> import re 
>>> re.match(r'^(?P<question_id>[0-9]+)/$', '122/').groupdict() 
{'question_id': '122'} 
+0

감사합니다. 이것은 문장을 테스트하는 좋은 방법입니다. –