Ruby-regular-expressions
Ruby-正規表現
_正規表現_は、パターンに保持されている特殊な構文を使用して、他の文字列または文字列セットを一致または検索するのに役立つ特殊な文字シーケンスです。
_正規表現literal_は、スラッシュの間、または次のように%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
正規表現修飾子
正規表現リテラルには、マッチングのさまざまな側面を制御するオプションの修飾子が含まれる場合があります。 修飾子は、前述のように、2番目のスラッシュ文字の後に指定され、これらの文字のいずれかで表すことができます-
Sr.No. | Modifier & Description |
---|---|
1 |
i テキストの一致時に大文字と小文字を区別しません。 |
2 |
o #\ {}補間を一度だけ実行します(正規表現リテラルが最初に評価されるとき)。 |
3 |
x 空白を無視し、正規表現でコメントを許可します。 |
4 |
m 複数行に一致し、改行を通常の文字として認識します。 |
5 |
u,e,s,n 正規表現をUnicode(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
正規表現パターン
制御文字を除き、(&plus;? 。 * ^&dollar; ()[] \ {} | \)、すべての文字が一致します。 制御文字の前にバックスラッシュを付けることにより、制御文字をエスケープできます。
____次の表に、Rubyで使用できる正規表現の構文を示します。
Sr.No. | Pattern & Description |
---|---|
1 |
^ 行頭に一致します。 |
2 |
$ 行末に一致します。 |
3 |
. 改行を除く任意の1文字に一致します。 mオプションを使用すると、改行も一致させることができます。 |
4 |
[…] 大括弧内の任意の1文字に一致します。 |
5 |
[^…] 括弧内にない任意の1文字と一致します |
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 |
正規表現の例
__ *リテラル文字 *
Sr.No. | Example & Description |
---|---|
1 |
/ruby/ 「ルビー」に一致します。 |
2 |
¥ 円記号に一致します。 マルチバイト文字は、Ruby 1.9およびRuby 1.8でサポートされています。 |
__ *文字クラス *
Sr.No. | Example & Description |
---|---|
1 |
/[Rr]uby/ 「Ruby」または「ruby」に一致します。 |
2 |
/rub[ye]/ 「ruby」または「rube」に一致します。 |
3 |
/[aeiou]/ 任意の1つの小文字の母音に一致します。 |
4 |
/[0-9]/ 任意の数字と一致します。/[0123456789]/と同じです。 |
5 |
/[a-z]/ 小文字のASCII文字に一致します。 |
6 |
/[A-Z]/ 大文字のASCII文字に一致します。 |
7 |
/[a-zA-Z0-9]/ 上記のいずれかに一致します。 |
8 |
/[^aeiou]/ 小文字の母音以外のものに一致します。 |
9 |
/[^0-9]/ 数字以外に一致します。 |
__ *特殊文字クラス *
Sr.No. | Example & Description |
---|---|
1 |
/./ 改行を除くすべての文字に一致します。 |
2 |
/./m 複数行モードでは、改行にも一致します。 |
3 |
/\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.No. | Example & Description |
---|---|
1 |
/ruby?/ 「rub」または「ruby」に一致します。yはオプションです。 |
2 |
/ruby/* 「rub」と0個以上のysに一致します。 |
3 |
/ruby+/ 「rub」と1つ以上のysに一致します。 |
4 |
/\d{3}/ 正確に3桁に一致します。 |
5 |
/\d\{3,}/ 3桁以上に一致します。 |
6 |
/\d\{3,5}/ 3、4、または5桁に一致します。 |
__ *貪欲でない繰り返し *
これは繰り返しの最小数に一致します-
Sr.No. | Example & Description |
---|---|
1 |
/<.>/* 貪欲な繰り返し:「<ruby> perl>」に一致します。 |
2 |
/<.?>/* 貪欲でない:「<ruby> perl>」の「<ruby>」に一致します。 |
__ *括弧でグループ化 *
Sr.No. | Example & Description |
---|---|
1 |
/\D\d+/ グループなし:+ \ dを繰り返す |
2 |
/(\D\d)+/ グループ化:+ \ D \ dペアを繰り返します |
3 |
/([Rr]uby(, )?)+/ 「ルビー」、「ルビー、ルビー、ルビー」などに一致 |
__ *後方参照 *
これは以前に一致したグループに再び一致します-
Sr.No. | Example & Description |
---|---|
1 |
/([Rr])uby&\1ails/ ruby&railsまたはRuby&Railsに一致します。 |
2 |
/(['"])(?:(?!\1).)\1/* 一重引用符または二重引用符で囲まれた文字列。 \ 1は、最初のグループが一致したものに一致します。 \ 2は、2番目のグループが一致したものに一致します。 |
__ *代替案 *
Sr.No. | Example & Description |
---|---|
1 | */ruby |
rube/* 「ruby」または「rube」に一致します。 |
2 |
*/rub(y |
le))/* 「ルビー」または「ルーブル」に一致します。 |
3 | */ruby(!+ |
__ *アンカー *
一致位置を指定する必要があります。
Sr.No. | Example & Description |
---|---|
1 |
/^Ruby/ 文字列または内部行の先頭の「Ruby」に一致します。 |
2 |
/RubyDOLLAR/ 文字列または行の末尾の「ルビー」に一致します。 |
3 |
/\ARuby/ 文字列の先頭の「Ruby」に一致します。 |
4 |
/Ruby\Z/ 文字列の末尾の「ルビー」に一致します。 |
5 |
/\bRuby\b/ 単語の境界で「ルビー」に一致します。 |
6 |
/\brub\B/ \ Bは非単語境界です。「rube」および「ruby」の「rub」に一致しますが、単独ではありません。 |
7 |
/Ruby(?=!)/ 感嘆符が後に続く場合、「Ruby」に一致します。 |
8 |
/Ruby(?!!)/ 感嘆符が後に続かない場合、「Ruby」に一致します。 |
__ *括弧付きの特別な構文 *
Sr.No. | Example & Description |
---|---|
1 |
/R(?#comment)/ 「R」に一致します。 残りはすべてコメントです。 |
2 |
/R(?i)uby/ 「uby」の照合中は大文字と小文字が区別されません。 |
3 |
/R(?i:uby)/ 同上。 |
4 | */rub(?:y |
検索と置換
正規表現を使用する最も重要な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