Ruby에서 정규 표현식과 일치하는 모든 항목을 찾는 빠른 방법이 있습니까? Ruby STL에서 Regex 객체를 살펴본 결과 Google에서 아무 소용이 없었습니다.
답변
사용 scan
하면 트릭을 수행해야합니다.
string.scan(/regex/)
답변
일치하는 모든 문자열을 찾으려면 String의 scan
메소드를 사용하십시오.
str = "A 54mpl3 string w1th 7 numb3rs scatter36 ar0und"
str.scan(/\d+/)
#=> ["54", "3", "1", "7", "3", "36", "0"]
MatchData
Regexp match
메소드가 리턴 한 오브젝트의 유형 인 원하는 경우 다음을 사용하십시오.
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 정규식 일치 열거 자 “
- ” 루비에서 각 경기의 시작 지점을 찾는 방법 “
특수 변수에 대해 읽기 $&
, $'
, $1
, $2
루비 너무 도움이 될 것입니다.
답변
그룹이있는 정규 표현식이있는 경우 :
str="A 54mpl3 string w1th 7 numbers scatter3r ar0und"
re=/(\d+)[m-t]/
String의 scan
메소드를 사용 하여 일치하는 그룹을 찾을 수 있습니다.
str.scan re
#> [["54"], ["1"], ["3"]]
일치하는 패턴을 찾으려면
str.to_enum(:scan,re).map {$&}
#> ["54m", "1t", "3r"]
답변
사용할 수 있습니다 string.scan(your_regex).flatten
. 정규식에 그룹이 포함되어 있으면 단일 일반 배열로 반환됩니다.
string = "A 54mpl3 string w1th 7 numbers scatter3r ar0und"
your_regex = /(\d+)[m-t]/
string.scan(your_regex).flatten
=> ["54", "1", "3"]
정규식도 명명 된 그룹 일 수 있습니다.
string = 'group_photo.jpg'
regex = /\A(?<name>.*)\.(?<ext>.*)\z/
string.scan(regex).flatten
당신은 또한 사용할 수 있습니다 gsub
당신이 MatchData을 원한다면 그냥 또 하나의 방법입니다.
str.gsub(/\d/).map{ Regexp.last_match }