English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
정규 표현식특수 시퀀스의 문자로, 특별한 문법을 사용하여 문자열 집합을 일치시키거나 찾는 데 사용됩니다.
정규 표현식은 사전에 정의된 특정 문자와 이러한 특정 문자의 조합으로 "규칙 문자열"을 구성하며, 이 "규칙 문자열"은 문자열에 대한 필터링 로직을 표현합니다.
정규 표현식표면적으로는 슬래시 사이나 %r 뒤의 어떤 구분자 사이에 위치한 모델이며, 다음과 같이 보입니다:
/pattern/ /pattern/im # 옵션을 지정할 수 있습니다 %r!/usr/local! # 사용자 정의 구분자를 포함한 정규 표현식
#!/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
정규 표현식은 표면적으로 선택적인 수식어를 포함할 수 있으며, 모든 측면의 일치를 제어하는 데 사용됩니다. 수식어는 두 번째 슬래시 문자 후에 지정됩니다. 위의 예제와 같이 다음은 가능한 수식어입니다:
수식어 | 描述 |
---|---|
i | 일치하는 텍스트 시 대소문자를 무시합니다. |
o | #{} 삽입자를 한 번만 실행하며, 정규 표현식은 첫 번째 점검에서 이미 판단됩니다. |
x | 공백을 무시하고, 표현식 전체에 공백 문자와 주석을 넣을 수 있습니다. |
m | 匹配多行,把换行字符识别为正常字符。 |
다중 줄을 일치시키고, 줄 바꿈 문자를 일반 문자로 인식합니다. | u,e,s,n-8을 정규 표현식으로 해석합니다. |
)、EUC、SJIS 또는 ASCII를 사용합니다. 별도의 모듈이 지정되지 않으면 정규 표현식은 원본 인코딩을 사용합니다.
就像字符串通过 %Q 进行分隔一样,Ruby 允许您以 %r 作为正则表达式的开头,后面跟着任意分隔符。这在描述包含大量您不想转义的斜杠字符时非常有用。 # 아래는 단일 슬래시 문자를 일치시키고,逃脱하지 않습니다./%r| | # Flag 문자는 다음 문법을 사용하여 일치시킬 수 있습니다./%r[<*(.
정규 표현식 패턴제어 문자를 제외한+ ( * ? .^ $ ( ) [ ] { } | \)
,그 외의 모든 문자는 자신과 일치시킵니다. 제어 문자 앞에 반대표를 두고 제어 문자를逃脱할 수 있습니다.
다음 표는 Ruby에서 사용할 수 있는 정규 표현식 문법을 나열합니다. | 描述 |
---|---|
패턴 | ^ |
$ | 줄의 시작을 일치시킵니다. |
. | 줄의 끝을 일치시킵니다. |
[...] | 괄호 내의 임의의 단일 문자를 일치시킵니다. |
[^...] | 괄호 내에 없는 임의의 단일 문자를 일치시킵니다. |
re* | 이전의 서브 표현식이 0 번 또는 여러 번으로 일치시킵니다. |
re+ | 이전의 서브 표현식이 1 번 또는 여러 번으로 일치시킵니다. |
re? | 이전의 서브 표현식이 0 번 또는 1 번으로 일치시킵니다. |
re{ n} | 이전의 서브 표현식이 n 번으로 일치시킵니다. |
re{ n,} | 이전의 서브 표현식이 n 번 또는 n 번 이상으로 일치시킵니다. |
re{ n, m} | 이전의 서브 표현식이 n 번 이상 m 번 이하로 일치시킵니다. |
a| b | a 또는 b를 일치시킵니다. |
(re) | 정규 표현식을 그룹화하되 일치된 텍스트를 기억합니다. |
(?imx) | 정규 표현식 내의 i, m, x 옵션을 일시적으로 활성화합니다. 괄호 내에 있으면 괄호 내 부분에만 영향을 미칩니다. |
(?-imx) | 정규 표현식 내의 i, m, x 옵션을 일시적으로 비활성화합니다. 괄호 내에 있으면 괄호 내 부분에만 영향을 미칩니다. |
(?: re) | 정규 표현식을 그룹화하되 일치된 텍스트를 기억하지 않습니다. |
(?imx: re) | 예시: re) |
(?-imx: re) | 예시: re) |
(?#...) | 주석. |
(?= re) | 패턴을 사용하여 위치를 지정합니다. 범위가 없습니다. |
(?! re) | 패턴의 부정을 사용하여 위치를 지정합니다. 범위가 없습니다. |
(?> re) | 뒤돌림 없이 독립적인 패턴을 일치시킵니다. |
\w | 영어 단어 문자를 일치시킵니다. |
\W | 영어 단어 문자가 아니라는 문자를 일치시킵니다. |
\s | 백지 문자를 매칭 |
\S | 비백지 문자를 매칭 |
\d | 숫자를 매칭-9]。 |
\D | 비숫자를 매칭 |
\A | 문자열의 시작을 매칭 |
\Z | 문자열의 끝을 매칭합니다. 개행 문자가 있으면, 개행 문자 전에만 매칭 |
\z | 문자열의 끝을 매칭 |
\G | 마지막 매칭된 점을 매칭 |
\b | 괄호 외에서 단어 경계를 매칭하면, 괄호 내에서는 백스페이스 키(0x0을 매칭8)。 |
\B | 비단어 경계를 매칭 |
\n, \t, 등. | 개행 문자, 엔터 문자, 탭 문자 등을 매칭 |
\1...\9 | n번째 그룹 서브 표현식을 매칭 |
\10 | 이미 매칭된 경우, n번째 그룹 서브 표현식을 매칭합니다. 그렇지 않으면 문자 코드의 8진수 표현을 가리킵니다. |
示例 | 描述 |
---|---|
/ruby/ | "ruby"를 매칭 |
¥ | Yen 기호를 매칭합니다. Ruby 1.9 와 Ruby 1.8 여러 문자를 지원 |
示例 | 描述 |
---|---|
/[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]/ | 모든 비숫자 문자를 매칭 |
示例 | 描述 |
---|---|
/./ | 개행 문자를 제외한 모든 문자를 매칭 |
/./m | 다중 행 모드에서도 개행 문자를 매칭할 수 있습니다. |
/\d/ | 한 개의 숫자를 매칭합니다. 동의어는 /[0-9]/ |
/\D/ | 한 개의 비숫자를 매칭합니다. 동의어는 /[^0-9]/ |
/\s/ | 한 개의 백지 문자를 매칭합니다. 동의어는 /[ \t\r\n\f]/ |
/\S/ | 한 개의 비백지 문자를 매칭합니다. 동의어는 /[^ \t\r\n\f]/ |
/\w/ | 한 개의 단어 문자를 매칭합니다. 동의어는 /[A-Za-z0-9_]/ |
/\W/ | 한 개의 비단어 문자를 매칭합니다. 동의어는 /[^A-Za-z0-9_]/ |
示例 | 描述 |
---|---|
/ruby?/ | "rub" 또는 "ruby"를 매칭합니다. y는 선택사항입니다. |
/ruby*/ | "rub"에 매칭 0 개나 많은 y. |
/ruby+/ | "rub"에 매칭 1 개나 많은 y. |
/\d{3}/ | 정확히 매칭 3 개의 숫자. |
/\d{3,}/ | 매칭 3 개나 많은 숫자. |
/\d{3,5}/ | 매칭 3 개,4 개나 5 개의 숫자. |
이는 최소 반복 횟수를 매칭합니다.
示例 | 描述 |
---|---|
/<.*>/ | 만만한 반복: "<ruby>perl>"을 매칭 |
/<.*?>/ | 비만만 반복: "<ruby>perl>" 중 "<ruby>"을 매칭 |
示例 | 描述 |
---|---|
/\D\d+/ | 无分组: + 重复 \d |
/(\D\d)+/ | 分组: + 重复 \D\d 对 |
/([Rr]uby(, )?)+/ | 匹配 "Ruby"、"Ruby, ruby, ruby",等等 |
这会再次匹配之前匹配过的分组。
示例 | 描述 |
---|---|
/([Rr])uby&\1ails/ | 匹配 ruby&rails 或 Ruby&Rails |
/(['"])(?:(?!\1).)*\1/ | 单引号或双引号字符串。\1 匹配第一个分组所匹配的字符,\2 匹配第二个分组所匹配的字符,依此类推。 |
示例 | 描述 |
---|---|
/ruby|rube/ | 匹配 "ruby" 或 "rube" |
/rub(y|le)/ | 匹配 "ruby" 或 "ruble" |
/ruby(!+|\?)/ | "ruby" 后跟一个或多个 ! 或者跟一个 ? |
这需要指定匹配位置。
示例 | 描述 |
---|---|
/^Ruby/ | 匹配以 "Ruby" 开头的字符串或行 |
/Ruby$/ | 匹配以 "Ruby" 结尾的字符串或行 |
/\ARuby/ | 匹配以 "Ruby" 开头的字符串 |
/Ruby\Z/ | 匹配以 "Ruby" 结尾的字符串 |
/\bRuby\b/ | 匹配单词边界的 "Ruby" |
/\brub\B/ | \B 是非单词边界:匹配 "rube" 和 "ruby" 中的 "rub",但不匹配单独的 "rub" |
/Ruby(?=!)/ | 如果 "Ruby" 后跟着一个感叹号,则匹配 "Ruby" |
/Ruby(?!!)/ | 如果 "Ruby" 后没有跟着一个感叹号,则匹配 "Ruby" |
示例 | 描述 |
---|---|
/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! 则会修改它们调用的字符串。
#!/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}"
위의 예제 실행 결과는 다음과 같습니다:
Rails는 Rails, Ruby on Rails가 매우 좋은 Ruby 프레임워크입니다