"aaabbcde".scan(/((\w)\2*)/)
이 줄은 내가 \2*
가 무엇을 이해하지 않는 부분루비에서이 정규식은 무엇을합니까?/코드 (( w) 2 *)/
[["aaa", "a"], ["bb", "b"], ["c", "c"], ["d", "d"], ["e", "e"]]
다음과 같은 결과를 얻을 것이다. 그리고 왜 이것이 2 차원 배열을 생성합니까?
편집 :
난 후 도움 받고 몇 가지 연구를하고 이해하는 것과 그냥 요약. 희망이 비슷한 주제를 검색하는 사람을 도울 것입니다.
정규식을 사용하여 캡처 그룹을 만들 수 있습니다. 그리고 후자의 그룹은 이전의 그룹을 나타낼 수 있습니다. 각} 호는 캡처 그룹입니다. 따라서 /(\w)/
을 수행하면 1 개의 그룹을 만들고 모든 단어 문자를 추출하여 각각의 단일 문자를 개별 그룹에 넣습니다.
그래서 두 번째 캡처 그룹을 만들려면 문자열 "rubyy"
Match 1
1. r
Match 2
1. u
Match 3
1. b
Match 4
1. y
Match 5
1. y
과 같은 것을 얻을 것이다, 당신은이 /((\w))/
처럼 괄호의 또 다른 쌍을 추가해야합니다. 그러나 바깥 쪽 괄호 쌍은 첫 번째 그룹이고 안쪽 그룹은 두 번째 그룹입니다. 그리고 이것은 앞뒤로 갈 수 있습니다.
동일한 문자열 "rubyy"
이 주어지면, 이와 같은 결과가 나타납니다.
Match 1
1. r
2. r
Match 2
1. u
2. u
Match 3
1. b
2. b
Match 4
1. y
2. y
Match 5
1. y
2. y
당신은 /(()\w)/
, 또는 /(\w)()/
에 정규식을 변경하고 일어날 것을 볼 시도 할 수 있습니다 (난 그냥 괄호의 내부 쌍 두 번째 그룹 말했다 기억?). http://www.rubular.com은 루비에서 정규 표현식을 실험하기에 좋은 장소입니다.
다른 캡처 그룹을 참조하는 포인터가 "당신이 그룹 # 2에서 무엇을 얻을 내게 줄 (내부 하나는 그룹 # 2) 그래서 원래 /((\w)\2*)/
에 대해 물었다 정규식, \2
이 부분은 단지 의미하며, 그룹 1 (외부 자식 인 경우 \2
)에 넣습니다. 그런 다음 *
은 0 이상의 숫자를 의미하는 정규 정규식입니다.이 경우 0보다 큰 그룹 # 2가 추출됩니다.
이해, 당신은 이것을 시도 할 수 /(\w)(\1*)/
. 이것도 비슷한 것을 얻을 것이다.하지만 차이점을 실험해야합니다. 그리고 기억, /(\2*)(\w)/
루비가이 유형의 파에서 연속적으로 실행되기 때문에 작동하지 않는다는 것을 기억하십시오. 평행 구조이므로 \2
은 아직 존재하지 않는 캡처 그룹을 가리 킵니다.
정규식; '\ 2'는 내부 참조 자 (두 번째 괄호 집합)의 자리 표시 자이며'* '는 0 번 이상의 반복과 일치합니다. – vol7ron
나는 http://rubular.com/이 정규 표현식을 테스트하고 개발하는데 매우 유용하다는 것을 발견했다. –
나는 그것을 사용하고 있습니다. 하지만 고마워, @ BSeven –