루비 정규 표현식
정규식은 특수한 구문이 포함된 패턴을 사용하여 문자열 집합을 일치시키거나 찾는 특수 문자 시퀀스입니다.
정규 표현식은 미리 정의된 특정 문자와 이러한 특정 문자의 조합을 사용하여 "규칙 문자열"을 형성합니다. 이 "규칙 문자열"은 문자열에 대한 필터링 논리를 표현하는 데 사용됩니다.
Syntax
정규식은 문자 그대로 슬래시 사이 또는 %r 다음에 오는 구분 기호 사이의 패턴입니다. 예:
/pattern/ /pattern/im # 可以指定选项 %r!/usr/local! # 使用分隔符的正则表达式
Example
#!/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
위 예제의 출력 결과는 다음과 같습니다. modifiers
정규식에는 문자 그대로 일치의 모든 측면을 제어하는 선택적 수정자가 포함될 수 있습니다. 수정자는 위의 예에 표시된 것처럼 두 번째 슬래시 문자 뒤에 지정됩니다. 가능한 수정자는 아래 첨자에 나열됩니다.
설명 | |
---|---|
텍스트를 일치시킬 때 대/소문자를 무시합니다. | |
#{} 보간을 한 번만 실행하면 정규식이 처음으로 평가됩니다. | |
공백을 무시하여 표현식 전체에 공백과 주석을 허용합니다. | |
은 여러 줄과 일치하며 개행 문자를 일반 문자로 인식합니다. | |
정규식을 유니코드(UTF-8), EUC, SJIS 또는 ASCII로 해석합니다. 수정자를 지정하지 않으면 정규식은 소스 인코딩을 사용하는 것으로 간주됩니다. |
패턴 | 설명 |
---|---|
^ | 줄의 시작 부분과 일치합니다. |
$ | 줄 끝과 일치합니다. |
. | 은 줄 바꿈을 제외한 모든 단일 문자와 일치합니다. m 옵션을 사용하면 개행 문자와도 일치할 수 있습니다. |
[...] | 은 대괄호 안의 단일 문자와 일치합니다. |
[^...] | 은 대괄호 안에 있지 않은 모든 단일 문자와 일치합니다. |
re* | 이전 하위 표현식과 0회 이상 일치합니다. |
re+ | 은 이전 하위 표현식과 한 번 이상 일치합니다. |
re? | 이전 하위 표현식과 0번 또는 1번 일치합니다. |
re{n} | 은 이전 하위 표현식과 n번 일치합니다. |
re{n,} | 이전 하위 표현식을 n번 이상 일치시킵니다. |
re{ n, m} | 이전 하위 표현식과 최소 n회, 최대 m회 일치합니다. |
a|b | 는 a 또는 b와 일치합니다. |
(re) | 정규 표현식을 그룹화하고 텍스트를 일치시키는 것을 기억하세요. |
(?imx) | 정규식 내에서 i, m 또는 x 옵션을 일시적으로 켭니다. 괄호 안에 있으면 괄호 안의 부분만 영향을 받습니다. |
(?-imx) | 정규 표현식 내에서 i, m 또는 x 옵션을 일시적으로 끕니다. 괄호 안에 있으면 괄호 안의 부분만 영향을 받습니다. |
(?: re) | 정규 표현식을 그룹화하지만 텍스트 일치를 기억하지 않습니다. |
(?imx: re) | 괄호 안의 i, m, x 옵션을 일시적으로 켜세요. |
(?-imx: re) | 괄호 안의 i, m, x 옵션을 일시적으로 끕니다. |
(?#...) | 댓글. |
(?= re) | 패턴을 사용하여 위치를 지정하세요. 범위가 없습니다. |
(?! re) | 패턴의 부정을 이용하여 위치를 지정합니다. 범위가 없습니다. |
(?> re) | 는 역추적 없이 독립 실행형 모드와 일치합니다. |
w | 단어 문자를 일치시킵니다. |
W | 은 단어가 아닌 문자와 일치합니다. |
s | 은 공백 문자와 일치합니다. [tnrf]와 동일합니다. |
S | 은 공백이 아닌 문자와 일치합니다. |
d | 숫자를 맞춰보세요. [0-9]와 동일합니다. |
D | 은 숫자가 아닌 숫자와 일치합니다. |
A | 은 문자열의 시작과 일치합니다. |
Z | 은 문자열의 끝과 일치합니다. 개행 문자가 존재하는 경우 개행 문자까지만 일치합니다. |
z | 은 문자열의 끝과 일치합니다. |
G | 경기가 완료되는 마지막 지점을 맞춰보세요. |
b | 괄호 밖에 있으면 단어 경계를 일치시키고 괄호 안에 있으면 백스페이스(0x08)를 일치시킵니다. |
B | 은 단어가 아닌 경계와 일치합니다. |
n, t 등 | 은 줄바꿈, 캐리지 리턴, 탭 등과 일치합니다. |
1...9 | n번째 그룹화된 하위 표현식과 일치합니다. |
10 | 이미 일치하는 경우 그룹화된 n번째 하위 표현식을 일치시킵니다.그렇지 않으면 문자 인코딩의 8진수 표현을 가리킵니다. |
정규식 예
Character
Example | Description |
---|---|
/ruby/ | match "ruby" |
\ | 엔 기호를 일치시킵니다. Ruby 1.9와 Ruby 1.8은 여러 문자를 지원합니다. |
Character 클래스
Instance | Description |
---|---|
/[Rr]uby/ | 는 "Ruby" 또는 "ruby"와 일치 |
/rub[ye]/ | 경기" ruby" 또는 "rube" |
/[aeiou]/ | 는 모든 소문자 모음과 일치합니다. |
/[0-9]/ | 은 모든 숫자와 일치하며 이는 /[0123456789]/ |
/[a-z]/ | 는 모든 소문자 ASCII 문자와 일치합니다. |
/[A-Z]/ | 은 모든 대문자 ASCII 문자와 일치합니다. |
/[a-zA-Z0-9]/ | 일치 괄호 안의 모든 문자 |
/[^aeiou]/ | 소문자 모음 문자가 아닌 모든 문자와 일치 |
/[^0-9]/ | 숫자가 아닌 문자와 일치 |
특수 문자 클래스
Instance | Description |
---|---|
/./ | 줄 바꿈을 제외한 모든 문자와 일치 |
/./m | 여러 줄 모드에서는 개행 문자와도 일치할 수 있습니다. |
/d/ | 는 /[0-9]/ |
/D/ | 에 해당하는 숫자와 일치하며 /[^0-9] / |
/s/ | 는 /[trnf]/ |
/S/ | 에 해당하는 공백 문자와 일치하며 /[^trnf]/ |
/에 해당하는 공백이 아닌 문자와 일치합니다. w/ | /[A-Za-z0-9_]/ |
/W/ | 에 해당하는 단어 문자와 일치 /[^A-Za-z0-9_] /에 해당하는 비단어 문자와 일치 |
repeat
인스턴스 | 설명 |
---|---|
/ruby?/ | 은 "rub" 또는 "ruby"와 일치합니다. 그 중 y는 선택사항입니다. |
/ruby*/ | 는 "rub"에 0개 이상의 y를 더한 것과 일치합니다. |
/ruby+/ | 은 "rub"와 1개 이상의 y를 일치시킵니다. |
/d{3}/ | 은 정확히 3개의 숫자와 일치합니다. |
/d{3,}/ | 3개 이상의 숫자를 일치시킵니다. |
/d{3,5}/ | 3, 4 또는 5개의 숫자를 일치시킵니다. |
Non-Greedy Repeat
최소 반복 횟수와 일치합니다.
Instance | Description |
---|---|
/<.*>/ | 탐욕스러운 중복: 일치 "<ruby>perl>" |
/<.*?>/ | Non-greedy 반복: "& lt; ruby & gt; perl & gt;" "" & lt; ruby & gt; 그룹화: + 반복 d |
backreference | 이전에 일치했던 그룹과 다시 일치합니다. |
---|---|
Instance | |
/([Rr])uby&1ails/ | |
/(['"])(?:(?!1).)*1과 일치합니다. / |
Description
/ruby|rube / | "ruby" 또는 "rube"와 일치 |
---|---|
/rub(y|le))/ | "ruby" 또는 "ruble"과 일치 |
/ruby(!! ^Ruby/ | 와 일치 "Ruby" |
/ARuby/ | 로 끝나는 문자열 또는 줄과 일치합니다. "Ruby"로 끝나는 문자열 또는 줄과 일치합니다. 문자열과 일치합니다. |
---|---|
/RubyZ/ | 로 시작 "Ruby"로 끝나는 문자열과 일치 |
/bRubyb/ | 단어 경계에서 "Ruby"와 일치 |
/brubB/ | B 예 거짓 단어 경계: 일치 "rube" 및 "ruby"의 "rub", 그러나 "rub" 단독은 아님 |
"Ruby" 뒤에 느낌표가 없으면 "Ruby"와 일치합니다 |
---|
예 | Description |
---|---|
/R(?#comment)/ | 은 "R"과 일치합니다. 나머지 문자는 모두 주석입니다. |
/R(?i)uby/ | "uby" 일치 시 대소문자를 구분하지 않습니다. |
/R(?i:uby)/ | 위와 같습니다. |
/rub(?:y|le))/ | 그룹화만 가능, 1개의 역참조 없음 |
sub 및 gsub 및 대체 변수 sub! 검색 및 바꾸기 gsub!는 정규 표현식 작업 시 중요한 문자열 메서드입니다.
이러한 모든 방법은 정규식 패턴을 사용하여 검색 및 바꾸기 작업을 수행합니다. sub 및 sub!는 패턴의 첫 번째 항목을 바꾸고, gsub 및 gsub!는 패턴의 모든 항목을 바꿉니다.
sub 및 gsub는 원래 문자열을 수정하지 않고 새 문자열을 반환하는 반면, sub! 및 gsub!는 호출된 문자열을 수정합니다.
다음은 예입니다.
# 下面匹配单个斜杠字符,不转义 %r|/| # Flag 字符可通过下面的语法进行匹配 %r[</(.*)>]i
위 예의 출력은 다음과 같습니다.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 #这是一个电话号码" # 删除 Ruby 的注释 phone = phone.sub!(/#.*$/, "") puts "电话号码 : #{phone}" # 移除数字以外的其他字符 phone = phone.gsub!(/\D/, "") puts "电话号码 : #{phone}"
다음은 또 다른 예입니다.
电话号码 : 138-3453-1111 电话号码 : 13834531111
위 예의 출력은
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails 是 rails, Ruby on Rails 非常好的 Ruby 框架" # 把所有的 "rails" 改为 "Rails" text.gsub!("rails", "Rails") # 把所有的单词 "Rails" 都改成首字母大写 text.gsub!(/\brails\b/, "Rails") puts "#{text}"