Ruby-정규식
정규 표현식 이 일치하거나 패턴에서 열린 전문 구문을 사용하여 문자열을 다른 문자열이나 세트를 찾는 데 도움이 문자의 특별한 순서입니다.
정규식 리터럴 슬래쉬 사이 또는 다음의 % R이어서 임의 구분자 간의 패턴 -
통사론
/pattern/
/pattern/im # option can be specified
%r!/usr/local! # general delimited regular expression
예
#!/usr/bin/ruby
line1 = "Cats are smarter than dogs";
line2 = "Dogs also like meat";
if ( line1 =~ /Cats(.*)/ )
puts "Line1 contains Cats"
end
if ( line2 =~ /Cats(.*)/ )
puts "Line2 contains Dogs"
end
이것은 다음 결과를 생성합니다-
Line1 contains Cats
정규식 수정 자
정규식 리터럴에는 일치의 다양한 측면을 제어하는 선택적 수정자가 포함될 수 있습니다. 수정자는 이전에 표시된 것처럼 두 번째 슬래시 문자 뒤에 지정되며 다음 문자 중 하나로 표시 될 수 있습니다.
Sr. 아니. | 수정 자 및 설명 |
---|---|
1 | i 텍스트와 일치 할 때 대소 문자를 무시합니다. |
2 | o 정규식 리터럴이 처음 평가 될 때 # {} 보간을 한 번만 수행합니다. |
삼 | x 공백을 무시하고 정규식에서 주석을 허용합니다. |
4 | m 줄 바꿈을 일반 문자로 인식하여 여러 줄과 일치합니다. |
5 | u,e,s,n 정규 표현식을 유니 코드 (UTF-8), EUC, SJIS 또는 ASCII로 해석합니다. 이러한 수정자가 지정되지 않은 경우 정규식은 소스 인코딩을 사용하는 것으로 간주됩니다. |
% Q로 구분 된 문자열 리터럴과 마찬가지로 Ruby를 사용하면 정규식을 % r 뒤에 선택한 구분 기호로 시작할 수 있습니다. 이것은 당신이 설명하는 패턴에 탈출하고 싶지 않은 많은 슬래시 문자가 포함되어있을 때 유용합니다.
# Following matches a single slash character, no escape required
%r|/|
# Flag characters are allowed with this syntax, too
%r[</(.*)>]i
정규 표현 패턴
제어 문자를 제외하고 (+ ? . * ^ $ ( ) [ ] { } | \), 모든 문자가 일치합니다. 제어 문자 앞에 백 슬래시를 붙여서 이스케이프 할 수 있습니다.
Sr. 아니. | 패턴 및 설명 |
---|---|
1 | ^ 줄의 시작과 일치합니다. |
2 | $ 줄 끝과 일치합니다. |
삼 | . 개행을 제외한 모든 단일 문자와 일치합니다. m 옵션을 사용하면 줄 바꿈도 일치시킬 수 있습니다. |
4 | [...] 괄호 안의 모든 단일 문자와 일치합니다. |
5 | [^...] 대괄호가 아닌 모든 단일 문자와 일치합니다. |
6 | re* 0 개 이상의 선행 표현식과 일치합니다. |
7 | re+ 1 개 이상의 선행 표현식과 일치합니다. |
8 | re? 0 또는 1 개의 선행 표현식과 일치합니다. |
9 | re{ n} 정확히 n 개의 선행 표현식과 일치합니다. |
10 | re{ n,} n 개 이상의 선행 표현식과 일치합니다. |
11 | re{ n, m} 이전 표현식의 최소 n 개 및 최대 m 개 항목과 일치합니다. |
12 | a| b a 또는 b와 일치합니다. |
13 | (re) 정규식을 그룹화하고 일치하는 텍스트를 기억합니다. |
14 | (?imx) 정규식 내에서 i, m 또는 x 옵션을 일시적으로 토글합니다. 괄호 안에 있으면 해당 영역 만 영향을받습니다. |
15 | (?-imx) 정규식 내에서 i, m 또는 x 옵션을 일시적으로 해제합니다. 괄호 안에 있으면 해당 영역 만 영향을받습니다. |
16 | (?: re) 일치하는 텍스트를 기억하지 않고 정규식을 그룹화합니다. |
17 | (?imx: re) 괄호 안의 i, m 또는 x 옵션을 일시적으로 토글합니다. |
18 | (?-imx: re) 괄호 안의 i, m 또는 x 옵션을 일시적으로 끕니다. |
19 | (?#...) 논평. |
20 | (?= re) 패턴을 사용하여 위치를 지정합니다. 범위가 없습니다. |
21 | (?! re) 패턴 부정을 사용하여 위치를 지정합니다. 범위가 없습니다. |
22 | (?> re) 역 추적없이 독립적 인 패턴과 일치합니다. |
23 | \w 단어 문자와 일치합니다. |
24 | \W 단어가 아닌 문자와 일치합니다. |
25 | \s 공백과 일치합니다. [\ t \ n \ r \ f]와 같습니다. |
26 | \S 공백이 아닌 것과 일치합니다. |
27 | \d 숫자와 일치합니다. [0-9]와 같습니다. |
28 | \D 숫자가 아닌 것과 일치합니다. |
29 | \A 문자열의 시작과 일치합니다. |
30 | \Z 문자열의 끝과 일치합니다. 개행이 존재하면 개행 직전에 일치합니다. |
31 | \z 문자열의 끝과 일치합니다. |
32 | \G 마지막 경기가 끝난 지점과 일치합니다. |
33 | \b 괄호 밖에있을 때 단어 경계와 일치합니다. 대괄호 안에있을 때 백 스페이스 (0x08)와 일치합니다. |
34 | \B 비 단어 경계와 일치합니다. |
35 | \n, \t, etc. 줄 바꿈, 캐리지 리턴, 탭 등과 일치합니다. |
36 | \1...\9 n 번째 그룹화 된 하위 표현식과 일치합니다. |
37 | \10 이미 일치하는 경우 n 번째 그룹화 된 하위 표현식과 일치합니다. 그렇지 않으면 문자 코드의 8 진 표현을 나타냅니다. |
정규식 예
Sr. 아니. | 예 및 설명 |
---|---|
1 | /ruby/ "ruby"와 일치합니다. |
2 | ¥ 엔 기호와 일치합니다. 멀티 바이트 문자는 Ruby 1.9 및 Ruby 1.8에서 지원됩니다. |
Sr. 아니. | 예 및 설명 |
---|---|
1 | /[Rr]uby/ "Ruby"또는 "ruby"와 일치합니다. |
2 | /rub[ye]/ "ruby"또는 "rube"와 일치합니다. |
삼 | /[aeiou]/ 하나의 소문자 모음과 일치합니다. |
4 | /[0-9]/ 모든 숫자와 일치합니다. / [0123456789] /와 동일합니다. |
5 | /[a-z]/ 모든 소문자 ASCII 문자와 일치합니다. |
6 | /[A-Z]/ 대문자 ASCII 문자와 일치합니다. |
7 | /[a-zA-Z0-9]/ 위와 일치합니다. |
8 | /[^aeiou]/ 소문자 모음 이외의 항목과 일치합니다. |
9 | /[^0-9]/ 숫자 이외의 항목과 일치합니다. |
Sr. 아니. | 예 및 설명 |
---|---|
1 | /./ 개행을 제외한 모든 문자와 일치합니다. |
2 | /./m 여러 줄 모드에서는 줄 바꿈도 일치합니다. |
삼 | /\d/ 숫자 / [0-9] /와 일치합니다. |
4 | /\D/ 숫자가 아닌 것과 일치합니다 : / [^ 0-9] /. |
5 | /\s/ 공백 문자와 일치 : / [\ t \ r \ n \ f] /. |
6 | /\S/ 비공 백과 일치 : / [^ \ t \ r \ n \ f] /. |
7 | /\w/ 단일 단어 문자와 일치합니다 : / [A-Za-z0-9 _] /. |
8 | /\W/ 비 단어 문자와 일치합니다 : / [^ A-Za-z0-9 _] /. |
Sr. 아니. | 예 및 설명 |
---|---|
1 | /ruby?/ "rub"또는 "ruby"와 일치 : y는 선택 사항입니다. |
2 | /ruby*/ "rub"+ 0 개 이상의 ys와 일치합니다. |
삼 | /ruby+/ "rub"+ 1 개 이상의 ys와 일치합니다. |
4 | /\d{3}/ 정확히 3 자리 숫자와 일치합니다. |
5 | /\d{3,}/ 3 개 이상의 숫자와 일치합니다. |
6 | /\d{3,5}/ 3, 4 또는 5 자리 숫자와 일치합니다. |
이것은 가장 적은 반복 횟수와 일치합니다.
Sr. 아니. | 예 및 설명 |
---|---|
1 | /<.*>/ 욕심 많은 반복 : "<ruby> perl>"과 일치합니다. |
2 | /<.*?>/ Non-greedy : "<ruby> perl>"의 "<ruby>"와 일치합니다. |
Sr. 아니. | 예 및 설명 |
---|---|
1 | /\D\d+/ 그룹 없음 : + 반복 \ d |
2 | /(\D\d)+/ 그룹화 : + \ D \ d 쌍 반복 |
삼 | /([Rr]uby(, )?)+/ "Ruby", "Ruby, ruby, ruby"등과 일치합니다. |
이전에 일치했던 그룹과 다시 일치합니다.
Sr. 아니. | 예 및 설명 |
---|---|
1 | /([Rr])uby&\1ails/ ruby & rails 또는 Ruby & Rails와 일치합니다. |
2 | /(['"])(?:(?!\1).)*\1/ 작은 따옴표 또는 큰 따옴표로 묶인 문자열. \ 1은 첫 번째 그룹이 일치하는 항목과 일치합니다. \ 2는 두 번째 그룹이 일치하는 항목과 일치합니다. |
Sr. 아니. | 예 및 설명 |
---|---|
1 | /ruby|rube/ "ruby"또는 "rube"와 일치합니다. |
2 | /rub(y|le))/ "ruby"또는 "ruble"과 일치합니다. |
삼 | /ruby(!+|\?)/ "루비"다음에 하나 이상의! 또는 하나? |
일치 위치를 지정해야합니다.
Sr. 아니. | 예 및 설명 |
---|---|
1 | /^Ruby/ 문자열 또는 내부 줄의 시작 부분에서 "Ruby"와 일치합니다. |
2 | /Ruby$/ 문자열 또는 행의 끝에있는 "Ruby"와 일치합니다. |
삼 | /\ARuby/ 문자열의 시작 부분에있는 "Ruby"와 일치합니다. |
4 | /Ruby\Z/ 문자열 끝에있는 "Ruby"와 일치합니다. |
5 | /\bRuby\b/ 단어 경계에서 "Ruby"와 일치합니다. |
6 | /\brub\B/ \ B는 단어가 아닌 경계입니다. "rube"및 "ruby"의 "rub"과 일치하지만 단독으로는 일치하지 않습니다. |
7 | /Ruby(?=!)/ 느낌표가 뒤에 오는 경우 "Ruby"와 일치합니다. |
8 | /Ruby(?!!)/ 느낌표가 뒤에 나오지 않으면 "Ruby"와 일치합니다. |
Sr. 아니. | 예 및 설명 |
---|---|
1 | /R(?#comment)/ "R"과 일치합니다. 나머지는 모두 주석입니다. |
2 | /R(?i)uby/ "uby"와 일치하는 동안 대소 문자를 구분하지 않습니다. |
삼 | /R(?i:uby)/ 같은 상기와. |
4 | /rub(?:y|le))/ \ 1 역 참조를 생성하지 않고 그룹화합니다. |
검색 및 바꾸기
정규식을 사용하는 가장 중요한 String 메서드는 다음과 같습니다. sub 과 gsub및 그 내부 변형 sub! 과 gsub!.
이러한 모든 메서드는 Regexp 패턴을 사용하여 검색 및 바꾸기 작업을 수행합니다. 그만큼sub & sub! 패턴의 첫 번째 발생을 대체하고 gsub & gsub! 모든 발생을 대체합니다.
그만큼 sub 과 gsub 새 문자열을 반환하고 원본은 수정되지 않은 상태로 둡니다. sub! 과 gsub! 호출되는 문자열을 수정하십시오.
다음은 예입니다-
#!/usr/bin/ruby
phone = "2004-959-559 #This is Phone Number"
# Delete Ruby-style comments
phone = phone.sub!(/#.*$/, "")
puts "Phone Num : #{phone}"
# Remove anything other than digits
phone = phone.gsub!(/\D/, "")
puts "Phone Num : #{phone}"
이것은 다음 결과를 생성합니다-
Phone Num : 2004-959-559
Phone Num : 2004959559
다음은 또 다른 예입니다.
#!/usr/bin/ruby
text = "rails are rails, really good Ruby on Rails"
# Change "rails" to "Rails" throughout
text.gsub!("rails", "Rails")
# Capitalize the word "Rails" throughout
text.gsub!(/\brails\b/, "Rails")
puts "#{text}"
이것은 다음 결과를 생성합니다-
Rails are Rails, really good Ruby on Rails