2014-01-29 5 views
3

나는 정규식에 새로운 오전, 내가 더 잘 이해할 수 있도록 내가 정규식을 분해하는 것을 시도하고있다 :정규식 ( d {3}) (? = d)은 무엇을 의미합니까?

/(\d{3})(?=\d)/ 

을 내가 (\d{3}) 3 자리 숫자를 캡처 이해하지만 제 2 부분을 캡처하려고하는 것을 확실 .

?=의 의미는 무엇입니까?

+0

정규식 [여기] [1]을 (를) 테스트 할 수 있습니다. 당신이 원하는 것이지만 여전히 도움이되는 것에 대한 진정한 대답은 아닙니다. [1] : http://regexpal.com/ – chillworld

답변

7

(?=\d)은 & 숫자 다음에 오는 숫자가 일치하는 것을 의미합니다.

그래서 이런 일이 발생합니다 :

1234 => capture 123 
123a => no match 
+0

설명해 주셔서 감사합니다. 따라서 다음 코드와 같이 : number.to_s.reverse.gsub (/ (\ d {3}) ('\ 1,') 이렇게하면 3 자리가 모두 포착됩니다. 그 뒤에 적어도 하나의 자리가 있습니다. true이면 ","에 하위를 입력하십시오. 괜찮으 시다면 "\ 1"에 대해 설명해 주시겠습니까? google에서이 문제를 조사해 보았습니다. 설명은 이해하기 어려웠습니다. – DHuang

+0

'\ 1'은 실제로 캡처 된 그룹 # 1에 대한 역 참조입니다. 그래서'1234'는'123,4'가 될 것입니다 – anubhava

2

(?=pat)-긍정적 예측 주장 다음 문자를 두드려 일치하는 것을 보장하지만, 일치하는 텍스트에서 해당 문자를 포함하지 않는

/(\d{3})(?=\d)/ - 여기서 (\d{3})은 3 자리 숫자를 캡처 한 다음 숫자가 나오지만 해당 그룹에 캡처되지 않는 마지막 숫자입니다.

here, here이 도움이 될 here

희망!

+0

설명 주셔서 감사 드리며 저에게 루블 러를 같이 넣어 주셔서 감사합니다 :) – DHuang

관련 문제