アプリ版:「スタンプのみでお礼する」機能のリリースについて

検索対象の文字列が、正規表現で言うなら
あい(う|え)かきく(け|こ)さ・・・
という感じであります。

それを検索したい文字列(1000個程度)の入ったファイルを順に読み込み、マッチしたら切り出し、さらに検索を続けて切り出していくという処理をしたいのですが、何から手をつけていいかわかりません。
どなたか教えてください。

A 回答 (6件)

いまいち、どういうふうに検索したいのか伝わってこないのですが


例えば「斉藤櫻井」「斉藤桜井」「斎藤櫻井」「斎藤桜井」を検索したいのなら
((斉|斎)藤)((櫻|桜)井)で検索できると思いますが
正規表現を使うまでもないような気もします。

また何の情報も無しに
「斎藤」に対して「斉藤」や「齋藤」も検索させたいのだとすると
あらかじめ「斉斎齋」を関連付けるような仕組みが必要です。

とりあえずファイルを読み込む仕組み等の基本的なところ
は絶対に必要なわけですから、まず自分なりに作ってみては?
それで行き詰ったら改めて質問すると良いと思いますが。
    • good
    • 0

souorceに格納されるデータの形式は分からないままですが、それも含めての設計だと解釈して回答します。



ループ回数が気になるとのことですので、BoostであればRegexではなくSpiritを使うのはどうでしょう。
テンプレートを駆使して正規表現的な記述が可能ですので、文字列よりはループ回数が緩和されると思います。
Boost.Spiritであれば、マルチバイト文字に対応させることも可能ですし...
    • good
    • 0

どうもよく分からないのですが...



sourceになる文字列は「あい(う|え)かきく(け|こ)さ・・・」という形式なのですか?それとも、「あいうかきくけさ・・・」や「あいえかきくけさ・・・」のように格納されているのですか?
実際のデータを教えてください。

この回答への補足

たとえばファイル1に「斎藤」「桜井」といった文字列が1000個くらいあり(このさきもっと増えるかもしれません)、
入力された文字列が「斉藤櫻井」だと、字が違うので検索してもマッチしませんよね。
そこで異体字や表記ゆれを登録したテーブルを用意してチェックすると、
「斉藤櫻井」「斉藤桜井」「斎藤櫻井」「斎藤桜井」の4通りになります。
ファイル1の文字列を正規表現のように検索すればいいのでしょうが、繰り返しの処理になるとループの数が多くなるので、入力した文字列をうまく処理してできないかと思ったのです。

補足日時:2005/03/25 13:58
    • good
    • 0

あと.NETならFrameworkに正規表現ライブラリがありますね。



参考URL:http://homepage2.nifty.com/IchigoPunch/program/r …
    • good
    • 0

>sourceからregexにマッチする部分文字列を探すのではなく、


>regexからsourceにマッチする部分文字列を探すといった感じになるのでしょうか?
ファイル(source)の中から
「あい(う|え)かきく(け|こ)さ・・・」(regex)
にマッチする部分を探す。

file0001.txt~file1000.textがあるとして

file1.txtから
「あい(う|え)かきく(け|こ)さ・・・」を探す
あったら該当部分をout.txtに書き込む。



file2.txtから



file1000.txtまで繰り返す。

boostを使うなら2つ目のURLの
「'置換'はどうやればいいのですか?」が参考になるでしょう。
対象の文字列から該当する文字列が見つかる度に
その部分を置き換えるという処理を行っています。

この回答への補足

説明べたで申し訳ありません。
今の場合「う」と「え」、「け」と「こ」が表記ゆれの部分で、
必ずしも「う」でなく、「え」になる可能性もあるので、それをふまえると
sourceになる文字列を正規表現風にあらわすと「あい(う|え)かきく(け|こ)さ・・・」になると思うんです。
で、fileには「あいうか」「きくこ」といった文字列が入っていて、「あいうか」がマッチするんで、sourceは「きく(け|こ)さ・・・」に。
さらに「きくこ」がマッチして、「さ・・・」と切り出していくということなんですけど。
意図が伝わりますか?

補足日時:2005/03/25 10:49
    • good
    • 0

とりあえず開発環境(コンパイラとOS)ぐらいは書いておいた方がいいでしょう。


まず、普通C++のコンパイラには、標準で
正規表現を検出する仕組みはありません。
別途ライブラリやdllが必要です。
一番有名なのがboostですね。

http://www.s34.co.jp/cpptechdoc/article/regexpp/ …
http://www.s34.co.jp/cpptechdoc/aftercare/art_24 …

あい(う|え)かきく(け|こ)さ・・・
と、ある程度文型が決まっているなら検索部分を自分で作っても
良いでしょう。

というかC/C++である必要がないならperlとかの方が簡単かも。

この回答への補足

失礼しました。
開発環境はVisual C++.NET 2002、Windows XPです。

補足すると表記のゆれの可能性がある文字列を入力し、
そのゆれを拾っていくと「検索される対象自体」が正規表現で表されるような形になり、
さらにそれをファイルにある文字列で切り出していく作業です。

教えていただいたページも見ましたが、私がやりたいのは、
sourceからregexにマッチする部分文字列を探すのではなく、
regexからsourceにマッチする部分文字列を探すといった感じになるのでしょうか?
説明が下手ですみません。

補足日時:2005/03/24 22:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!