[ruby] 정규식의 모든 항목을 일치시키는 방법
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 }