- 1 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:36:04 ]
- 正規表現(Regular Expression)スレです。
質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 【 前スレ 】 正規表現 Part5 pc12.2ch.net/test/read.cgi/tech/1212498448/
- 169 名前:デフォルトの名無しさん [2009/07/28(火) 16:26:27 ]
- マッチする判定じゃなくて
正規表現書いたらそれを満たす全ての文字列を生成する プログラムを書くのは難しいですか?
- 170 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:33:47 ]
- ^.*$
- 171 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:35:25 ]
- 正規表現によっては終わらない可能性があるわけだな
- 172 名前:デフォルトの名無しさん [2009/07/28(火) 16:37:23 ]
- >>170
それをやると遅延評価的に必要な分だけ垂れ流すんです
- 173 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:37:58 ]
- 文字数限定すればできることはできる
指定字数の全ての組み合わせの文字列をその正規表現にマッチさせて 成功したものだけをリストアップすればいい 速度的にどれだけ実用になるかは不明 最適化するとなると論文レベル
- 174 名前:デフォルトの名無しさん [2009/07/28(火) 16:40:11 ]
- フィルターにかけるのではなく
初めから有効な物しか生成しないものとします
- 175 名前:デフォルトの名無しさん [2009/07/28(火) 16:42:08 ]
- >>174
よし、正規表現をパースすることから始めよう。
- 176 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:42:44 ]
- 等価な有限オートマトンをバックトラックしながらしらみつぶしに探索するような
プログラムを書けばできそうだな。
- 177 名前:デフォルトの名無しさん [2009/07/28(火) 16:56:58 ]
- 数学的に可能ですか?
僕が心配してるのは5次以上のn次方程式の一般解 を探そうとしていやしないかという事です
- 178 名前:デフォルトの名無しさん [2009/07/28(火) 17:00:53 ]
- 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい
- 179 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:12:42 ]
- > 正規表現書いたらそれを満たす全ての文字列を生成する
> それをやると遅延評価的に必要な分だけ垂れ流すんです > 初めから有効な物しか生成しないものとします > 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい 何をしたいんだよ?お前は。 とりあえず学校の宿題なら自分でやれ。それか自分で調べろ
- 180 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:33:48 ]
- ごめんなさい><
- 181 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:46:04 ]
- >>179
とりあえずかの有名なこれでいいんじゃねーの? ttp://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1026-0&YEAR=2003 ttp://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-1027-7&YEAR=2003
- 182 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:52:14 ]
- >>181
あり^^
- 183 名前:亀 [2009/07/29(水) 13:06:01 ]
- 聞くのもどうかと思ったんですが調べても解決しなかったので、聞きたいのですが
『正規表現の定義』ってなんですか?
- 184 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:11:58 ]
- ほんとに調べたのか?
- 185 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:18:50 ]
- 文字列一致確認用プログラミング言語
- 186 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:19:32 ]
- >>183
アルファベットΣ上の正規表現とは、 - 空集合 0 - Σ の要素 c - r, s が正規表現のとき r + s - r, s が正規表現のとき rs - r が正規表現のとき r* のいずれか。
- 187 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 13:23:42 ]
- >>186
宿題は自分でやらせろよ。
- 188 名前:末吉 [2009/07/29(水) 14:16:10 ]
- >>186
183は定義を聞いてるんだろ??
- 189 名前:デフォルトの名無しさん [2009/07/29(水) 15:17:02 ]
- 定義じゃん
- 190 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 15:56:14 ]
- >>188
ここの「形式言語理論における正規表現」を見ろ ttp://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE
- 191 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:05:59 ]
- 見るなら正規言語だろう。
ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A8%80%E8%AA%9E
- 192 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:46:52 ]
- 正規言語と正規表現は本質的には同じだけど違うものだし
- 193 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 17:11:51 ]
- >>181は激しく良書なので啓蒙しとく
大学のオートマトンのテキストがひどかったので この本は難しいだろうと思ってずっと敬遠してたが これはとてもわかりやすかった 予備知識もほとんどいらない (最初のほうは背理法だとか数学的帰納法のレベルから解説) 厳密な定義がちゃんと書いてあるが それに先だって具体例をあげて説明がある ただ、この本を読んでも>>169の実装に直接には役立たないかもしれない (0+1)*1(0+1)+(0+1)*1(0+1)(0+1)のような正規表現を簡約して より計算しやすい正規表現に変換する といった最適化なら正規表現の代数的性質の章でちょろっと学べる
- 194 名前:169 mailto:sage [2009/07/29(水) 19:37:54 ]
- 直接役には立たなくても正規表ゲニストを目指す僕は
正規表ゲニスト名乗っててオートマトンも知らんのかと 馬鹿にされるのは嫌なので オートマトニストにもなります><
- 195 名前:デフォルトの名無しさん [2009/07/29(水) 19:59:04 ]
- もういいから消えろよ
- 196 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 23:55:35 ]
- aaa/bbb/ccc
aaa/bbb/ddd aaa/ccc/eee ・ ・ ・ 上のような文字列があって正規表現での検索時間(grepとか)を速くしたいと思っていますが、 高速化するために正規表現の合成?みたいなことができるようなライブラリってありますでしょうか? 検索したい文字列のリストはだいたい1行が30〜40文字程度で100行〜200行ほど 検索対象はファイルサイズで400Mbyte〜6Gbyteぐらいです。
- 197 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:09:32 ]
- 質問をもっと推敲しろ
- 198 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:10:30 ]
- 必要ない行はgrepで飛ばして読めばおk
- 199 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:13:49 ]
- grepパイプでつなげば十分なんじゃね?
- 200 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:46:05 ]
- パイプって言いたかっただけやんwww
- 201 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 03:14:06 ]
- >>199
せめて -e を並べるか -f だろー。
- 202 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 09:14:17 ]
- fgrep使うのが正解
- 203 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 12:45:55 ]
- いつから言葉遊びをするスレになったのですか?
- 204 名前:デフォルトの名無しさん [2009/07/30(木) 14:47:20 ]
- 正規表現は秀丸でちょこっと\n\n\nとか^[a-z]くらいをいじっただけの初心者なのに、
Javaで、JavaのDecimalFormat用文字列を Excelの数値フォーマット定義文字列に変換するフィルターを作ってます。 『他の人にやらせりゃいいのに…まあ調べればわかるやろ…』と思って始めましたが、 案の定、いきなり引っかかりました。www 1)引用符'を引用符"に変換する正規表現(ただし連続''は'自体を表すので"にしない) 2)''に囲まれていない浮動小数点EをE+に ([0#])(E)([0#])を\1E+\3に なお、変換は単一の正規表現で行う必要はなく、 順序依存のある複数の置換をかけてもOKです。 ただしできれば、各フィルターは常に全文に適用したいと思います。 (不要なフィルターも通過させる) 最悪、一部の変換結果を絶対にユーザが使わない予約語に変換して避けておく… ということも可能だと思いますが… 正直、いきなり1)で引っかかったのにはガックリきました。 フィルター文字列定義をpropertiesで外出しにして 出荷後もサポートで変更・追加できるようにしないとマズイな…
- 205 名前:204 mailto:sage [2009/07/30(木) 14:56:08 ]
- 作成中ソースの一部ですが、何をやりたいかは見当つくと思います。
これが論理的にダメダメと言うことはわかってます。 ////////////////////////////////// //シングルクォート囲みをダブルクォート囲みに //'"'→\" //まず引用符の中の"自体をエスケープする。\" filter = new RegFilter("'\"'","\\\""); filterlist.add(filter); //シングルクォート囲みをダブルクォート囲みにする前に、 //連続''は'1個をあらわすので、"'"に変換してやる。 filter = new RegFilter("''","'"); filterlist.add(filter); //シングルクォートをダブルクォートに変換してやる。 //ただしさっきのを除く必要がある。 filter = new RegFilter("[^']'","\""); filterlist.add(filter); //全フィルターを通す変換実行 sResult = executeFilters(sFormat, filterlist);
- 206 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 15:49:13 ]
- うん、わかるね
- 207 名前:204 mailto:sage [2009/07/30(木) 15:56:54 ]
- msdn.microsoft.com/ja-jp/library/2k3te2cs.aspxにいいのがありますた。
1)は (')([^']+)(')→\"\2\" ''→' の2つでいけるかなぁ…
- 208 名前:204 mailto:sage [2009/07/30(木) 16:24:35 ]
- 2)の浮動小数点EをE+にするのは、
引用符の中のEだけをEEに退避 ([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7 浮動小数点のEをE+に (*.)([#0])(E)([#0])(*.)→\1\2E\+\4\5 退避したEEをEに戻す (*.)(EE)(*.)→\1E\3 の3つで97%くらいは出来てるかなあ。 変換対象の最後が引用符のときに落としちゃうけど、まあ…
- 209 名前:204 mailto:sage [2009/07/30(木) 16:27:22 ]
- *と.が逆だった。
引用符の中のEだけをEEに退避 ([^']+)(')([^']+)(E)([^']+)(')([^']+)→\1\2\3EE\5\6\7 浮動小数点のEをE+に (.*)([#0])(E)([#0])(.*)→\1\2E\+\4\5 退避したEEをEに戻す (.*)(EE)(.*)→\1E\3
- 210 名前:204 mailto:sage [2009/07/30(木) 16:40:36 ]
- 最初から地にEEがあるとEになっちゃうか。
横着せずに引用符の中のEEだけをもどさないとだめだな。
- 211 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:06:52 ]
- ダブルクォートの中にカンマを含むフィールドのことを考えると
正規表現よりは文脈自由言語でパースしたほうが絶対にいい
- 212 名前:204 mailto:sage [2009/07/31(金) 10:43:27 ]
- かも知れないけど、開発の立ち上げ工数と、今後のメンテを考えるとなー。
(あまり入出力仕様は変わらないと思うが、日付フォーマット変換の追加がありうる) 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。 また、必ずしも完璧に作る必要はなくて、 ユーザが業務で使うごく一般的なフォーマット文字列を通せれば後は制限事項でもいいし。 それをいえば、想定顧客に、浮動小数点使ってる人なんていないんじゃないかと思うけどね。。。
- 213 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:31:23 ]
- >>212
> 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。 いねーだろ。どの口が言ってんだ?あん?
- 214 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:58:34 ]
- ていうかここって日記スレなのか?
- 215 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:16:24 ]
- 正規表現はフィットする目的には早く書けるけど、保守性は悪いし実行
速度は遅いしで、まともなプロジェクトには使わないよ。
- 216 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:21:08 ]
- まともでないプログラマ乙
- 217 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:24:55 ]
- >>216
>>204 に回答してから言えよ。
- 218 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:27:31 ]
- 言うほど保守性が悪いとも思わないし、実行速度も
用途に十分なら別にかまわんしなぁ。 むしろ正規表現使わずにだらだら書かれたほうが 見通しが悪くて遅い場合も多い。適材適所。
- 219 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:28:28 ]
- >>218
>>204 に回答してから言えよ。
- 220 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:33:32 ]
- >>219
問題がよくわかんないし、javaとexcelだしスルー。
- 221 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:37:46 ]
- そもそも便所の落書きに仕事を持ち込まれても知らんし。
- 222 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:14:57 ]
- >>212
正規表現で書かれたフィルタのバグ取りなんてぞっとする ちゃんとした技術者なら、RFCにCSVのBNFがそのまま載ってるんだから BNFの通りにコーディングすりゃ テスト含めて1日で終わるよ
- 223 名前:204 mailto:sage [2009/07/31(金) 13:15:56 ]
- >>213
おっと確かに! 居ないからこそ、漏れがやる羽目になっとるわけだがwww (出来る人に空きが無いという理由もある) しかしま、コトは相対比較で十分なんで。 >>221 まあねえ。ML探して加入して自己紹介して 過去ログ検索して質問投げるってのが本来なんだろうが。 でもwww.rubular.com/とかでちょこちょこやるうちに 何とかなりそうな気がしてきた。
- 224 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:26:42 ]
- >>207
'''hoge' みたいなパターンがダメなのでは。 >>205 がよくわからんのだが、正規表現の変換処理のリスト (filterlist) を積んで、 executeFilters() でそれらを順番に逐次処理して適用する、ということ? そんなん絶対うまくいかんと思うが。
- 225 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:43:19 ]
- 絶対入力するなよ!絶対だぞ!絶対入れるなよ!
で切り抜けるんだろう
- 226 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:56:39 ]
- >>211
だよねー。 Java は良く知らないんだが、 JavaCC とか使えばスッキリ書けないのかね?
- 227 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 14:17:27 ]
- CSV扱うライブラリぐらいjavaにもありそうなもんだけどな。
- 228 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 16:40:25 ]
- Javaでも20行未満で書けるレベルの処理だろうに。
- 229 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 16:50:34 ]
- >>228
お前がそれをさっさと書かないからこのネタが延々と終わらんだろうが。
- 230 名前:デフォルトの名無しさん [2009/07/31(金) 16:56:53 ]
- ライブラリあるの?
- 231 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 16:57:34 ]
- SuperCSVオススメ
- 232 名前:デフォルトの名無しさん [2009/07/31(金) 18:02:03 ]
- >>228
期待age
- 233 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 04:17:10 ]
- それをここでやるのはスレ違い。
- 234 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 08:51:21 ]
- 逃げる気か?
- 235 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:11:53 ]
- >>234
あんた馬鹿?
- 236 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 12:43:12 ]
- 逃げやがったな。口だけ達者で、ほんとは何も出来ないヤツw
- 237 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 12:45:19 ]
- >>236
あんた馬鹿?
- 238 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:24:30 ]
- 負け犬めガッ!一生逃げ回ってろ
- 239 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:29:08 ]
- なにこの粘着質
- 240 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:30:20 ]
- 質問者でしょ。それ以外に利益のある人はいない
- 241 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:33:21 ]
- 人生の敗北者!
- 242 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 13:44:54 ]
- 質問者はもっと回答者に敬意を持って接しろ
- 243 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 14:01:48 ]
- 愉快犯の荒らしだろ。放置推奨
- 244 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 23:44:50 ]
- 228 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/31(金) 16:40:25
Javaでも20行未満で書けるレベルの処理だろうに。 ↑ できもしないことを、いい加減に書くのは、質問者に対して失礼。 第三者も見ていて不愉快。 おまいこそ最悪の荒らし!
- 245 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 00:07:19 ]
- そんなに粘着する必要あるのかと。
>>228が無知で、何も知らずに発言しちゃっただけかも知れないんだぜ? くだらないプライドを守っている暇があったら、勉強して技術向上して 人生をエンジョイした方が、オタク(というかハッカー精神)的に 意味のあるものになるんじゃないのかね?
- 246 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 00:26:43 ]
- なにしにきたんだよ もう帰れよ
- 247 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 06:43:38 ]
- Javacに一行の文字数制限があったかどうかが
気になってしようがないわけだが。
- 248 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 11:29:02 ]
- 無知で、何も知らないならレスしないでください。
- 249 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 11:42:35 ]
- そもそも 204って質問だったのか?
アドバイスが欲しいらしいのはわかるが、お願いします的なセリフは何も書いてないだろ ウゼー独り言延々書き込んでるやつがいるなぁ位の認識だったんだが。
- 250 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:12:46 ]
- 珍しく伸びていると思えばこれか
- 251 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:38:58 ]
- 喧嘩嫌
- 252 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:54:39 ]
- >お願いします的なセリフは何も書いてないだろ
www 苦しい言い訳。 「お願いします」口調なら、「Javaでも20行未満で書けるレベルの処理」になるのかい?
- 253 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 16:59:48 ]
- まあ書いてやってもいいかな、くらいだけどな
- 254 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:12:00 ]
- >>253
中学生2年生かおまいは
- 255 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 05:00:11 ]
- 中学生はジャポニカ学習帳でも焼いて食ってろ
- 256 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 07:08:27 ]
- 中学二年生にだって天才はいるかもだろ
ニヤニヤと見守るのがベター
- 257 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 13:34:29 ]
- おっと〜!自称「天才」中学2年生現る!
・・・で?20行で書けないの?天才さんw
- 258 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 13:35:10 ]
- 今なら30行に負けてあげてもいいんだけど
- 259 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:18:18 ]
- マジキチ
- 260 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 19:21:17 ]
- 土日は遊んでたので見てなかったがまだやってんのか。ヒマだね〜
- 261 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:25:05 ]
- どうした?30行でも不足か?
そっちが20行と言ったから20行なわけで。 べつに、40行でも50行でも構わんのだがな。
- 262 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:27:15 ]
- マジキチ
- 263 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:37:57 ]
- >Javaでも20行未満で書けるレベルの処理だろうに。
こいつ、恥ずかしくなって逃げたのか。布団かぶって泣いてるのか?
- 264 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:43:09 ]
- マジキチ
- 265 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:36:06 ]
- なんだこの流れ
Javaよくわからんから20行が無茶ぶりなのかどうか知らんけど 一体何が夏厨の琴線に触れちゃったの? 質問者不在で誰も求めてないコード請求してもしょーがなくね?
- 266 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:43:39 ]
- 生理の日かアレな人かどちらか
- 267 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:49:27 ]
- javaで20行書くのに、いったい何日かかってんだよ。
速いとこコードを晒せ。それですべて解決する話だろ?
- 268 名前:デフォルトの名無しさん [2009/08/03(月) 23:55:01 ]
- マジキチ
- 269 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:15:52 ]
- おはよう!10行くらい書けた?まだかな?
|

|