質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1180閲覧

rubyの正規表現について

banianizm

総合スコア92

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/03/11 14:46

お世話になります。
rubyの資格試験の学習をしています。

問題以下になります。

以下の正規表現にマッチする文字列を2つ選択してください

^[hc].*o$/i

解答群

Hello holland Cello h35L320

答えは HelloとCelloです。

答えは」わかっているのですが解答の解説が不十分で理解できません。

恐れ入りますが、分かりやすく教えていただけないでしょうか?

もしくは、分かりやすいサイトなど教えていただけないでしょうか?

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/03/11 15:01

具体的に、何が理解できないのでしょうか。
guest

回答2

0

正規表現をグラフ表示させるとよいかもしれません。
https://regexper.com/#%5E%5Bhc%5D.*o%24
イメージ説明

/^[hc].*o$/ よりは /\A[hc].*o\z/ のほうが良いかもしれません。
(^ と \A, $ と \zの違いは
http://westhillworker.com/ruby-regexp/ などを参照してください。

"hel\nlo" のように改行が含まれていた場合に、マッチするか、マッチしないかの差があります。

参考情報

  • 正規表現をテスト・可視化できるサイト

https://qiita.com/kazuki43zoo/items/c47036af579e9e667702

  • ブラウザから手軽にチェックできる正規表現テストツールまとめ

https://nelog.jp/regular-expression-online-tools

投稿2018/03/11 16:43

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず正規表現リテラルが間違っています。先頭にスラッシュがつきませんか?

以下,正しくは

rb

1/^[hc].*o$/i

であるとして回答します。

この正規表現は以下の五つの部分パターンの 連接 です。連接というのは,平たく言うと,「〇〇のあとに△△が連なる」というものですね。

  • ^
  • [hc]
  • .*
  • o
  • $

これら五つのものがこの順に並んだ文字列,ということです。

そして,i は大文字/小文字の違いを無視するオプションですね。

さて,^ は行頭です。行頭とはなんぞや,というのは実は深い問題ですが,解答群の中に改行を含んだ文字列が存在しないので,ナイーヴに「今の場合は文字列先頭と同じこと」と考えてもかまいません。(一般にはそんなのダメですよ!)

次に,[hc] は文字クラスで,〈h または c〉なんですが,i オプションがあることを考えると,正確には〈h または H または c または C〉です。

.* は,〈改行を除く任意の文字が 0 字以上連なったもの〉ですね。つまり,空文字列とか "hoge" とか "あ" とか。

o はリテラル,つまり o という文字そのものですが,i オプションがあるので,正確には〈o または O〉です。

$ は行末。行末も突き詰めると難しいですが,上の行頭の話と同じ理由で「今の場合は文字列末尾と同じこと」と考えてかまいません。

以上を合わせると,

〈第 1 字が h/H/c/C のいずれかで,最終文字が o/O のいずれかであり,その間に改行が存在しないような文字列〉

となります。

投稿2018/03/11 15:04

scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

banianizm

2018/03/11 15:16

ありがとうございます。 完璧でした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問