it-swarm-ko.tech

정규식의 모든 일치

Ruby에서 정규 표현식의 모든 일치 항목을 빠르게 찾을 수 있습니까? Ruby STL의 Regex 객체를 살펴본 결과 아무런 쓸모가 없다고 Google에서 검색했습니다.

558
Chris Bunch

scan 를 사용하여 트릭을 수행해야합니다.

string.scan(/regex/)
787
Jean

일치하는 모든 문자열을 찾으려면 scan 클래스의 String 메서드를 사용하십시오.

str = "A 54mpl3 string w1th 7 numb3rs scatter36 ar0und"
str.scan(/\d+/)
#=> ["54", "3", "1", "7", "3", "36", "0"]

만약 MatchData , match 클래스의 Regexp 메쏘드에 의해 반환 된 객체의 타입을 원한다면, 다음을 사용하십시오

str.to_enum(:scan, /\d+/).map { Regexp.last_match }
#=> [#<MatchData "54">, #<MatchData "3">, #<MatchData "1">, #<MatchData "7">, #<MatchData "3">, #<MatchData "36">, #<MatchData "0">]

MatchData을 사용하면 얻을 수있는 이점은 offset과 같은 메소드를 사용할 수 있다는 것입니다.

match_datas = str.to_enum(:scan, /\d+/).map { Regexp.last_match }
match_datas[0].offset(0)
#=> [2, 4]
match_datas[1].offset(0)
#=> [7, 8]

더 많은 것을 알고 싶다면 다음 질문을 참조하십시오.
문자열에있는 모든 Ruby 정규 표현식의 일치 데이터를 얻으려면 어떻게해야합니까?
명명 된 캡처 지원과 함께 루비 정규식 검색 열거 자
Ruby에서 각 경기의 출발점을 찾는 방법

Ruby에서 특수 변수 $&, $', $1, $2에 대한 정보는 매우 유용합니다.

57
sudo bangbang

그룹과 함께 정규 표현식을 사용하는 경우

str="A 54mpl3 string w1th 7 numbers scatter3r ar0und"
re=/(\d+)[m-t]/

문자열 검색 방법을 사용하여 일치하는 그룹을 찾습니다.

str.scan re
#> [["54"], ["1"], ["3"]]

일치하는 패턴을 찾으려면 다음을 수행하십시오.

str.to_enum(:scan,re).map {$&}
#> ["54m", "1t", "3r"]
11
MVP