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

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

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

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

Q&A

解決済

3回答

1276閲覧

正規表現で「または」の条件を使いたいです

bouyomisan

総合スコア87

Ruby

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

0グッド

0クリップ

投稿2017/04/25 01:22

編集2017/04/25 01:23

¥1,000 ~ ¥2,000 / Day と
¥800 ~ ¥900 / Month という条件にマッチさせたいです。
金額のほうはできたのですが、 / Day と /Month がうまくできません。

金額なら

ruby

1money = "¥1,000 ~ ¥2,000 / Month" 2money.match /(¥\d{1,3}\,\d{1,3} ~ ¥\d{1,3}\,\d{1,3} \/ Month)/ 3puts $1

でうまくいくのですが、それを Day や Year にも同時に適応したいです。やりかたを教えてください。

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

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

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

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

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

guest

回答3

0

Ruby

1money.match /(¥((\d{1,3}\,?)+) ~ ¥((\d{1,3}\,?)+) \/ (Day|Month))/

で、http://www.rubular.com/でチェックすると

Match 1 1. ¥800 ~ ¥900 / Month 2. 800 3. 800 4. 900 5. 900 6. Month Match 2 1. ¥1,000 ~ ¥2,000 / Day 2. 1,000 3. 000 4. 2,000 5. 000 6. Day

となる感じです。

考え方としては、\d{1,3}で、3桁までの数値、その後に\,?で、カンマがあるかも知れないという表現。
これを1セットとした((\d{1,3}\,?)+の末尾が+になっていることにより、コレが1回以上繰り返される表現となります。
つまり、

1 200 3,000 40,000,000 500000000

等でもマッチします。
値段のところはコレで取得でき、「Month」「Day」については、( )でグルーピングした上で|でORを表現しています。

投稿2017/04/25 02:05

kunai

総合スコア5405

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

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

0

いろいろ間違いが。
二重引用符や、正規表現リテラルの中で、\の「文字」を書きたい時は\\と書きます。

「または」は|です。

Ruby

1money = '\1,000 ~ \2,000 / Month' 2money.match /(\\\d{1,3},\d{1,3} ~ \\\d{1,3},\d{1,3} \/ (?:Month|Day))/ 3puts $1

あと、マッチが成功したかどうか、matchの返値をチェックした方が良いです。

投稿2017/04/25 02:02

編集2017/04/25 02:04
otn

総合スコア84498

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

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

0

自己解決

ruby

1salary.match /(¥\d{1,3}\,\d{1,3} ~ ¥\d{1,3}\,\d{1,3} \/ (?:Hour|Month|Day|Yaer))/

としたらできました。正規表現で()はキャプチャ用とまとめる用の2つがあり、Day とか Month の部分はまとめる用として使いたかったです。ですが、すでにキャプチャ用としてつかっていることから悩んでいたのですが、調べると (?:) これを使えばまとめる用として明示的に使用することができます。

投稿2017/04/25 01:59

bouyomisan

総合スコア87

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問