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

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

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

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

Q&A

解決済

4回答

3999閲覧

【Ruby/正規表現】指定文字から指定文字までの間を抽出したい

pecchan

総合スコア555

Ruby

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

0グッド

0クリップ

投稿2019/07/07 05:36

編集2019/07/07 07:06

Rubyも正規表現も初めてで行き詰っております。

以下のような文章があります。

txt

1aaaaabbbbbbccccddddd;https://www.youtube.com;hoehogehoge_embedded xxxx,yyyy,zzzz 2

この中から、
https://www.youtube.com」~「_embedded」
までの
https://www.youtube.com;hoehogehoge;_embedded」
を取得したいです。

以下のようにしたのですが、

ruby

1str.match(/.*_embedded;/) 2

前全部が取得されてしまいましたorz

txt

1aaaaabbbbbbccccddddd;https://www.youtube.com;hoehogehoge;_embedded

正しい記述を教えて下さい。
宜しくお願い致します。

【同日追記】
https://www.youtube.com」~「_embedded」の前後は、実際には特に決まった形式はなく、
日本語の文章などが入ります。

【例文】
以下のような感じです。

お早う。https://www.yahoo.co.jp こんにちは。<br> https://www.youtube.com;aaaxxxxxxxxhohhohohooho_embedded hhh xxxxYYY https://www.google.com/ dddd テストテスト。

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

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

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

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

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

guest

回答4

0

rubyは良く知りませんが、下のコードで出来てる気がします。

a ="お早う。https://www.yahoo.co.jp こんにちは。<br> https://www.youtube.com;aaaxxxxxxxxhohhohohooho;test;xxxxYYY h\ ttps://www.google.com/ dddd テストテスト。" b = a.match(/https:.*?;/) puts b[0]

投稿2019/07/07 06:31

KojiDoi

総合スコア13669

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

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

KojiDoi

2019/07/07 06:54

ちょっと質問を勘違いしていました。 これですが、最初のhttpは拾いたくないということですか。つまり、捨てるべき文字列の中にもhttp~が含まれうるということでしょうか。だとすれば、すこし拾うべき文字列のパターンを考え直す必要があるように思います。
pecchan

2019/07/07 06:56

度々申し訳ございません。 さようです。途中に出てくるhttpは拾いたくなく、youtubeと付くものだけ拾いたいのです。 ※youtubeと付くものは必ず1つになります。
guest

0

ベストアンサー

str.match(/https://www.youtube.com.*?_embedded/)
ではどうでしょうか。

ruby

1str = 'aaaaabbbbbbccccddddd;https://www.youtube.com;hoehogehoge_embedded xxxx,yyyy,zzzz' 2result = str.match(/https://www.youtube.com.*?_embedded/) 3puts result 4

実行結果
https://www.youtube.com;hoehogehoge_embedded

投稿2019/07/07 08:11

編集2019/07/07 08:32
tatsu99

総合スコア5424

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

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

pecchan

2019/07/07 08:39

有難う御座います。 おかげで取得できました。 正規表現、難しいです。
asm

2019/07/07 15:42

URIを含む正規表現の場合は %r{https://}的な感じにすると/をエスケープする必要がなくなり {}はURIには存在しない文字なのでちょっと楽です。
pecchan

2019/07/09 02:40

有難う御座います。
guest

0

その場で書いたコードですが、

text = 'aaaaabbbbbbccccddddd;https://www.youtube.com;hoehogehoge;test;xxxx,yyyy,zzzz' array = text.split(";", 2) array[1]

として、最初の;が出てきたら分割し、その後のものをとるのはどうでしょうか?

投稿2019/07/07 05:44

bamboo-nova

総合スコア1408

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

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

pecchan

2019/07/07 05:49

ありがとうございます。 説明、記載不足ですいません。 「https://www.youtube」より前の部分は、決まった形はなく、 「こんにちは。今日は晴れました。https://www.youtube」 のような場合もあります。
bamboo-nova

2019/07/07 05:56

str.match(/https:.*;/)はいかがでしょうか
pecchan

2019/07/07 06:08

有難う御座います。 度々すみません。 何も返ってきませんでした。 途中にも"https"があるからかもしれません。
bamboo-nova

2019/07/07 06:46

str.scan(/https(?<=https)[^;]+/) 肯定後読みで、httpsを含めれば行けると思います
pecchan

2019/07/07 07:09

本当に度々申し訳ございません。 以下のように返ってきました。 [&quot;https://i.ytimg.com/vi/klzRkH0ZNtQ/0.jpg\&quot; frameborder=\&quot;0\&quot; height=\&quot;266\&quot; src=\&quot;https://www.youtube.com/embed/klzRkH0ZNtQ?feature=player_embedded\&quot; width=\&quot;320\&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&quot;] この中から、 https://www.youtube.com/embed/klzRkH0ZNtQ?feature=player_embedded だけ取得したいです。
bamboo-nova

2019/07/07 07:22

質問ですが、要はyoutubeに関連したURLを取得したいということでしょうか? どちらにしても、先ほど渡したURLを少し弄れば取得できるのですが...汗
bamboo-nova

2019/07/07 07:35

array = text.scan(/https://www.youtube(?<=https://www.youtube)[^\\&]+/) とりあえず、youtubeのURLだけで良さそうなので、ややこしいですがこれでいけました
pecchan

2019/07/07 08:39

度々申し訳ございません。 有難う御座いました。
guest

0

a.rb

ruby

1strs = [ 2 'aaaaabbbbbbccccddddd;https://www.youtube.com;hoehogehoge_embedded xxxx,yyyy,zzzz', 3 'お早う。https://www.yahoo.co.jp こんにちは。<br> https://www.youtube.com;aaaxxxxxxxxhohhohohooho_embedded hhh xxxxYYY https://www.google.com/ dddd テストテスト。', 4 'xxx' 5] 6 7z = strs.map do |x| 8 m = x.match(/.*(https://www.youtube.com;.*?_embedded) .*/) 9 m[1] if m 10end.compact 11p z

実行例
イメージ説明

投稿2019/07/07 11:50

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問