人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現で以下のテキストから、「」を含む部分を抽出したいのですが、うまくいきません。

「aaaaaaaaaaaa」bbbbbbbbbbbbbbb「cccccccccccccccccc」dddddddddd「eeeeeeeeee」

[「]^[「『]+[」]

上記の正規表現を行うと、「aaaaaaaaaaaa」、「cccccccccccccccccc」、「eeeeeeeeee」を抽出したいのですが、bbbbbbbbbbbbbbb、ddddddddddも引っかかってしまいます。

この問題を解決するには、どのような正規表現にすればいいのでしょうか?

●質問者: takets
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:テキスト 抽出 正規表現
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● bayan
●19ポイント

^[「『]+


の意図するところは、"「" と "『" 以外の文字の1個以上の繰り返し、でしょうか。

であればここは、

[^「『]+

でしょうかね。

http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%B...


[^ ] 括弧内に含まれない一文字にマッチする。例えば、[^abc] は a、b、c 以外の任意の文字にマッチする。[^a-z] は小文字以外の任意の一文字にマッチする。上と同様にこれらは混ぜることが出来る。

^ 行の最初にマッチする。



PHPで preg_match や、ereg の関数使っているのかなと勝手に想像したのですが、正規表現を利用できる環境はいろいろあり(PHP,Perl,Java,awk,sed,秀丸,vim...etc)、各々方言とかクセがあったと思うので、「何」で「どのように」を詳細に書いたほうがいいかもしれません。


あとコメントをオープンにしていただいた方が、質問や意見がしやすいので、

回答を集めやすいかもしれません。

◎質問者からの返答

ありがとうございます。

pythonで試していたのですが、だいたい目的のことができるようになりました。


2 ● imai164
●19ポイント

「[^「」]+」

で試してみてください。

一応秀丸エディタで確認しましたがうまくいくと思います。

URL必須なのでWikipediaのページを…

http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%B...

◎質問者からの返答

ありがとうございます。


3 ● Mook
●18ポイント

言語の指定がありませんでしたので、Perl での例ですが、

 my $t = "「aaaaaaaaaa」bbbbbbbbbb「cccccccccc」dddddddddd「eeeeeeeeee」"; 
 while ($t =~ /(.+?)/g){ push(@word, $1); } 
 print "@word\n"; 

で下記のような結果になります。

「aaaaaaaaaa」「cccccccccc」「eeeeeeeeee」

http://www.rfs.jp/sb/perl/02/09.html

◎質問者からの返答

ありがとうございます。


4 ● tezcello
●18ポイント

PHP だとこんな感じですけど。

http://www.php.net/manual/ja/function.preg-match-all.php

$str = '「aaaaaaaaaaaa」bbbbbbbbbbbbbbb「cccccccccccccccccc」dddddddddd「eeeeeeeeee」';
preg_match_all('/「(.+?)」/', $str, $res);
var_dump($res);

で、結果は

array(2) {

[0]=>

array(3) {

[0]=>

string(18) "「aaaaaaaaaaaa」"

[1]=>

string(24) "「cccccccccccccccccc」"

[2]=>

string(16) "「eeeeeeeeee」"

}

[1]=>

array(3) {

[0]=>

string(12) "aaaaaaaaaaaa"

[1]=>

string(18) "cccccccccccccccccc"

[2]=>

string(10) "eeeeeeeeee"

}

}

◎質問者からの返答

ありがとうございます。

pythonで実行していましたが、できるようになりました。

ただ、zzzzzzzzzzzzzzzzzzzzz「aaaaaaaaaaaa」bbbbbbbbbbbbbbb「cccccccccccccccccc」dddddddddd「eeeeeeeeee」

の場合、zzzzzzzzzzzzzzzzzzも取得できてしまうようですが、必要な分は解決できました。


5 ● tezcello
●18ポイント

コメントが出来ませんのでこちらに書きますが、この回答にはポイント不要です。


うちのPHPでは、z が先頭にあっても問題無く動作するようです。言語によって実装に差があるのかも知れませんね。

「 」 で挟まれた文字の1回以上の繰り返し(最短でマッチ)というつもりの正規表現なので、???って感じですが...

http://www.kt.rim.or.jp/~kbk/regex/regex.html

http://www.php.net/manual/ja/reference.pcre.pattern.syntax.php

$str = 'zzzzzzzzzzzzzzzzzzzzz「aaaaaaaaaaaa」bbbbbbbbbbbbbbb「cccccccccccccccccc」dddddddddd「eeeeeeeeee」';
preg_match_all('/「(.+?)」/', $str, $res);
var_dump($res);

array(2) {

[0]=>

array(3) {

[0]=>

string(16) "「aaaaaaaaaaaa」"

[1]=>

string(22) "「cccccccccccccccccc」"

[2]=>

string(14) "「eeeeeeeeee」"

}

[1]=>

array(3) {

[0]=>

string(12) "aaaaaaaaaaaa"

[1]=>

string(18) "cccccccccccccccccc"

[2]=>

string(10) "eeeeeeeeee"

}

}


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ