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

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

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

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

17771閲覧

正規表現でカンマ区切りの中にある群を抜き出したい

kitori_jp

総合スコア25

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/09/12 15:53

野菜(トマト,タマネギ,ニラ),肉,水,魚(ブリ,マグロ,アジ,トビウオ),炭水化物

この文字列から「野菜(トマト,タマネギ,ニラ)」と「魚(ブリ,マグロ,アジ,トビウオ)」を正規表現で抜き出したい

(.(.))でやると行頭から最後の)までになっちゃうし(.?(.?))だと最初のやつしか取れないし・・・
得意ではないなりに、なんとなく?!とか?=>とかの否定のルールを使えばできそうな気はするのですが考え方がよくわかりません。
どうやって書けば抜けるのか教えて下さい。

正解だけでも大変ありがたいですが、考え方のヒントもいただけるとなお嬉しいです。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

標準的なプログラミング言語の使用が前提であれば、
ループで処理して、マッチするたびに文字列のインデックスを進め、
ひとつずつカッコを抜き出していくのが、
(正規表現が)シンプルに書けると思います。

投稿2016/09/12 16:28

LLman

総合スコア5592

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

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

kitori_jp

2016/09/13 00:10

ありがとうございます。 ループで抜く、というか削っていく感じでしょうか。 いらないものから正規表現で抜いて消していくというイメージ・・・かな?
guest

0

ベストアンサー

後読みとかしてよいのであればこうですが、どうでしょう?

(?<=^|,)[^,]+?(.+?)

投稿2016/09/13 01:46

yambejp

総合スコア114583

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

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

kitori_jp

2016/09/13 02:17

greatです!ありがとうございます。 どの位置にあっても確実に()つきの項目をひとつ抜ける正規表現になっているようです。 whileで判定なくなるまで検索文を置き換えながらループさせれば必要分の()つき項目を抜くことができそうです。 while(正規表現の成否判定){ $文章を正規表現 $文章の中の正規表現結果をhogeでリプレイス $保存用配列[]=正規表現結果 } みたいな感じかな。
guest

0

この記述で希望するデータが抜き出せます。

/(.(.)),.,(.(.*))/

http://okumocchi.jp/php/re.php
こういった正規表現をテストするサイトがあるので、そこでいろいろ試してみると回答が見つけやすいと思いますよ。

投稿2016/09/12 16:52

masayoshi0222

総合スコア162

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

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

kitori_jp

2016/09/13 00:07

ありがとうございます。 こちらの正規表現は()つきの項目が連続したり文頭に()なしの項目がいると抜けない条件が限られたものですよね。なんとかある程度汎用性が利く正規表現にしたいです。 正規表現のテストサイトも使ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問