2010-08-04 1 views
4

해당 문자열의 접두사가 허용되는 길이와 일치해야합니다.반복 구문 ({N})에서 Regex 역 참조 사용

예를 들어 abc 부분이 3 자이기 때문에 {3}abc이 일치합니다. {3}abcdabcd이 아니기 때문에3 자 길이이므로 실패합니다.

나는 ^\{(\d+)\}.{\1}$이 (중괄호, 다음 모든 문자 N 시간 안에 숫자 N 캡처) 사용하는 것이 있지만, 반복 구조의 값이 숫자가 될 것으로 보인다 (또는 적어도, 그것은 역 참조를 허용하지 않습니다). 이 false를 반환하는 동안

/^\{(\d+)\}.{3}$/.test("{3}abc")

을 :

예를 들어, 자바 스크립트에서이 true를 돌려

/^\{(\d+)\}.{\1}$/.test("{3}abc")

이 하나의 정규식에서 할이 가능, 또는 내가 필요한 것 다음과 같이 두 단계로 나누는 것에 의지하십시오 :

/^\{(\d+)\}/.test("{3}abc") && RegExp("^\\{" + RegExp.$1 + "\\}.{" + RegExp.$1 + "}$").test("{3}abc")

답변

2

정규식을 계산할 수 없으므로 정규식으로 만이를 수행 할 수 없습니다.

문자열을 /^\{(\d+)\}(.*)$/과 일치시킨 다음 len($2)==int($1)을 확인하십시오. 예를 들어 파이썬에서

:

>>> import re 
>>> t1 = "{3}abc" 
>>> t2 = "{3}abcd" 
>>> r = re.compile(r"^\{(\d+)\}(.*)$") 
>>> m1 = r.match(t1) 
>>> m2 = r.match(t2) 
>>> len(m1.group(2)) == int(m1.group(1)) 
True 
>>> len(m2.group(2)) == int(m2.group(1)) 
False 
+0

아, 나는 많은 생각. 내 의혹을 확인해 주셔서 감사합니다. – davecardwell