Ruby 正規表現
正規表現特別な文字シーケンスであり、専用の構文を持つパターンを使用して、文字列の集合をマッチングまたは検索します。
正規表現は、あらかじめ定義された特定の文字とそれらの組み合わせを使用して「規則文字列」を構成し、この「規則文字列」で文字列に対するフィルタリングロジックを表現します。
構文
正規表現文字通りには、スラッシュの間、または %r に続く任意の区切り文字の間にあるパターンです。次に示します:
例
試してみる »
上記の例の実行出力結果は次のとおりです:
Line1 contains Cats
正規表現修飾子
正規表現は、文字通り、マッチングのさまざまな側面を制御するオプションの修飾子を含むことができます。修飾子は、上記の例のように、2番目のスラッシュ文字の後に指定します。次の表に、可能な修飾子を示します:
| 修飾子 | 説明 |
|---|---|
| i | テキストをマッチングするときに大文字と小文字を無視します。 |
| o | #{} の補間を一度だけ実行し、正規表現は最初の時点で評価されます。 |
| x | 空白を無視し、式全体に空白文字とコメントを配置することを許可します。 |
| m | 複数行にマッチングし、改行文字を通常の文字として認識します。 |
| u,e,s,n | 正規表現を Unicode(UTF-8)、EUC、SJIS、または ASCII として解釈します。修飾子が指定されていない場合、正規表現はソースエンコーディングを使用すると見なされます。 |
文字列が %Q で区切られるのと同様に、Ruby では正規表現の先頭に %r を使用し、その後に任意の区切り文字を続けることができます。これは、エスケープしたくないスラッシュ文字を多数含む表現を記述する場合に非常に便利です。
正規表現パターン
制御文字を除いて、(+ ? . * ^ $ ( ) [ ] { } | \)他のすべての文字はそれ自体にマッチします。制御文字の前にバックスラッシュを置くことで、制御文字をエスケープできます。
次の表に、Ruby で使用できる正規表現構文を示します。
| パターン | 説明 |
|---|---|
| ^ | 行の先頭にマッチします。 |
| $ | 行の末尾にマッチします。 |
| . | 改行以外の任意の1文字にマッチします。m オプションを使用すると、改行にもマッチします。 |
| [...] | 角括弧内の任意の1文字にマッチします。 |
| [^...] | 角括弧内にない任意の1文字にマッチします。 |
| re* | 直前の部分式に0回以上マッチします。 |
| re+ | 直前の部分式に1回以上マッチします。 |
| 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 | 空白文字にマッチします。[\t\n\r\f] と同等です。 |
| \S | 非空白文字にマッチします。 |
| \d | 数字にマッチします。[0-9] と同等です。 |
| \D | 非数字にマッチします。 |
| \A | 文字列の先頭にマッチします。 |
| \Z | 文字列の末尾にマッチします。改行がある場合は、改行の前までにのみマッチします。 |
| \z | 文字列の末尾にマッチします。 |
| \G | 最後にマッチが完了した位置にマッチします。 |
| \b | 括弧の外では単語境界にマッチし、括弧内ではバックスペースキー(0x08)にマッチします。 |
| \B | 非単語境界にマッチします。 |
| \n, \t, etc. | 改行、復帰、タブなどにマッチします。 |
| \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]/ | 任意の1つの数字にマッチ。/ |
| /[a-z]/ | 任意の小文字の ASCII 文字にマッチ |
| /[A-Z]/ | 任意の大文字の ASCII 文字にマッチ |
| /[a-zA-Z0-9]/ | 括弧内の任意の1文字にマッチ |
| /[^aeiou]/ | 小文字の母音文字以外の任意の1文字にマッチ |
| /[^0-9]/ | 任意の非数字文字にマッチ |
特殊文字クラス
| 例 | 説明 |
|---|---|
| /./ | 改行以外の任意の文字にマッチ |
| /./m | 複数行モードでは、改行にもマッチ |
| /\d/ | 1つの数字にマッチ。/[0-9]/ と同等 |
| /\D/ | 1つの非数字にマッチ。/[^0-9]/ と同等 |
| /\s/ | 1つの空白文字にマッチ。/[ \t\r\n\f]/ と同等 |
| /\S/ | 1つの非空白文字にマッチ。/[^ \t\r\n\f]/ と同等 |
| /\w/ | 1つの単語文字にマッチ。/[A-Za-z0-9_]/ と同等 |
| /\W/ | 1つの非単語文字にマッチ。/[^A-Za-z0-9_]/ と同等 |
繰り返し
| 例 | 説明 |
|---|---|
| /ruby?/ | "rub" または "ruby" にマッチ。ここで y は省略可能です。 |
| /ruby*/ | "rub" に y が0個以上続くものにマッチ。 |
| /ruby+/ | "rub" に y が1個以上続くものにマッチ。 |
| /\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 は2番目のグループがマッチした文字にマッチし、以下同様です。 |
選択
| 例 | 説明 |
|---|---|
| /ruby|rube/ | "ruby" または "rube" にマッチ |
| /rub(y|le)/ | "ruby" または "ruble" にマッチ |
| /ruby(!+|\?)/ | "ruby" の後に1個以上の ! が続くか、または ? が1個続く |
锚
これにはマッチ位置の指定が必要です。
| 例 | 説明 |
|---|---|
| /^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!呼び出された文字列自体を変更します。
例
試してみる »
上記の例の実行出力結果は次のとおりです:
电话号码 : 138-3453-1111 电话号码 : 13834531111
例
試してみる »
上記の例の実行出力結果は次のとおりです:
Rails 是 Rails, Ruby on Rails 非常好的 Ruby 框架その他の拡張