09/07/22 02:48:28
>>158
Match()一発じゃなくてMatches()で地道にいっこずつ切り出してみた。もっといい方法はあるかもしれん
Dim r As Regex = New Regex("(?:<.*?>)+(.+?)(?=<|$)")
Dim s As String = "<html1><html2>AAA<html3>BBB<html4><html5>CCC<html6>DDD<html7>"
For Each m As Match In r.Matches(s)
Console.WriteLine("{0}", m.Groups(1).Value)
Next
160:デフォルトの名無しさん
09/07/26 09:55:51
正規表現、特にNFAって計算量が大きいので
実用上、30~40文字ぐらいが限界だったように記憶してるのですが
NFAとDFAでの計算量ってO表記でどのぐらいでしたっけ?
wikiにそういう情報のせといて欲しい・・
161:デフォルトの名無しさん
09/07/26 10:56:30
PHPのpreg(perl互換)の話なのですけど、
/(?<=<div>)(.*?)(?=<\/div>)/is
はエラーにならなくて
/(?<=<div[^>]*>)(.*?)(?=<\/div>)/is
がエラーになる理由が分からないのですが、
なぜなのでしょうか
162:デフォルトの名無しさん
09/07/26 10:59:13
なぜと言われても・・・そう設計してあるから、としか言いようがないな
163:デフォルトの名無しさん
09/07/26 11:01:24
>>2 の「正規表現メモ」の (?<=pattern) の解説には
固定長の文字列に対してのみ働きます(処理系による。可変長の文字列を許可する処理系もあります
と書いてある。つまりそういうことだ。
164:デフォルトの名無しさん
09/07/26 11:06:41
なるほど。これは固定長のみでしたか。
ありがとうございます。
別のルートから正規表現の方法を探す事にします。
165:デフォルトの名無しさん
09/07/26 17:28:23
/(?<=<div[^>]{0,99}>)(.*?)(?=<\/div>)/is
可変長は無理でもこの書き方({0,99})がOKな処理系もあるから試してみろ
166:デフォルトの名無しさん
09/07/27 09:08:56
>>160
DFAの計算量は自明でしょ。
NFAはパターンとテキストによって違うから一概には言えないんじゃないかな。
167:デフォルトの名無しさん
09/07/27 12:33:41
適当なことばっかり言うのはやめてください
168:デフォルトの名無しさん
09/07/27 13:29:38
セルフでコンプリートすればパーフェクトですよ
169:デフォルトの名無しさん
09/07/28 16:26:27
マッチする判定じゃなくて
正規表現書いたらそれを満たす全ての文字列を生成する
プログラムを書くのは難しいですか?
170:デフォルトの名無しさん
09/07/28 16:33:47
^.*$
171:デフォルトの名無しさん
09/07/28 16:35:25
正規表現によっては終わらない可能性があるわけだな
172:デフォルトの名無しさん
09/07/28 16:37:23
>>170
それをやると遅延評価的に必要な分だけ垂れ流すんです
173:デフォルトの名無しさん
09/07/28 16:37:58
文字数限定すればできることはできる
指定字数の全ての組み合わせの文字列をその正規表現にマッチさせて
成功したものだけをリストアップすればいい
速度的にどれだけ実用になるかは不明
最適化するとなると論文レベル
174:デフォルトの名無しさん
09/07/28 16:40:11
フィルターにかけるのではなく
初めから有効な物しか生成しないものとします
175:デフォルトの名無しさん
09/07/28 16:42:08
>>174
よし、正規表現をパースすることから始めよう。
176:デフォルトの名無しさん
09/07/28 16:42:44
等価な有限オートマトンをバックトラックしながらしらみつぶしに探索するような
プログラムを書けばできそうだな。
177:デフォルトの名無しさん
09/07/28 16:56:58
数学的に可能ですか?
僕が心配してるのは5次以上のn次方程式の一般解
を探そうとしていやしないかという事です
178:デフォルトの名無しさん
09/07/28 17:00:53
取り敢えずオートマトンを学ぶに適した良書を紹介して下さい
179:デフォルトの名無しさん
09/07/28 17:12:42
> 正規表現書いたらそれを満たす全ての文字列を生成する
> それをやると遅延評価的に必要な分だけ垂れ流すんです
> 初めから有効な物しか生成しないものとします
> 取り敢えずオートマトンを学ぶに適した良書を紹介して下さい
何をしたいんだよ?お前は。
とりあえず学校の宿題なら自分でやれ。それか自分で調べろ
180:デフォルトの名無しさん
09/07/28 17:33:48
ごめんなさい><
181:デフォルトの名無しさん
09/07/28 17:46:04
>>179
とりあえずかの有名なこれでいいんじゃねーの?
URLリンク(www.saiensu.co.jp)
URLリンク(www.saiensu.co.jp)
182:デフォルトの名無しさん
09/07/28 17:52:14
>>181
あり^^
183:亀
09/07/29 13:06:01
聞くのもどうかと思ったんですが調べても解決しなかったので、聞きたいのですが
『正規表現の定義』ってなんですか?
184:デフォルトの名無しさん
09/07/29 13:11:58
ほんとに調べたのか?
185:デフォルトの名無しさん
09/07/29 13:18:50
文字列一致確認用プログラミング言語
186:デフォルトの名無しさん
09/07/29 13:19:32
>>183
アルファベットΣ上の正規表現とは、
- 空集合 0
- Σ の要素 c
- r, s が正規表現のとき r + s
- r, s が正規表現のとき rs
- r が正規表現のとき r*
のいずれか。
187:デフォルトの名無しさん
09/07/29 13:23:42
>>186
宿題は自分でやらせろよ。
188:末吉
09/07/29 14:16:10
>>186
183は定義を聞いてるんだろ??
189:デフォルトの名無しさん
09/07/29 15:17:02
定義じゃん
190:デフォルトの名無しさん
09/07/29 15:56:14
>>188
ここの「形式言語理論における正規表現」を見ろ
URLリンク(ja.wikipedia.org)
191:デフォルトの名無しさん
09/07/29 16:05:59
見るなら正規言語だろう。
URLリンク(ja.wikipedia.org)
192:デフォルトの名無しさん
09/07/29 16:46:52
正規言語と正規表現は本質的には同じだけど違うものだし
193:デフォルトの名無しさん
09/07/29 17:11:51
>>181は激しく良書なので啓蒙しとく
大学のオートマトンのテキストがひどかったので
この本は難しいだろうと思ってずっと敬遠してたが
これはとてもわかりやすかった
予備知識もほとんどいらない
(最初のほうは背理法だとか数学的帰納法のレベルから解説)
厳密な定義がちゃんと書いてあるが
それに先だって具体例をあげて説明がある
ただ、この本を読んでも>>169の実装に直接には役立たないかもしれない
(0+1)*1(0+1)+(0+1)*1(0+1)(0+1)のような正規表現を簡約して
より計算しやすい正規表現に変換する
といった最適化なら正規表現の代数的性質の章でちょろっと学べる
194:169
09/07/29 19:37:54
直接役には立たなくても正規表ゲニストを目指す僕は
正規表ゲニスト名乗っててオートマトンも知らんのかと
馬鹿にされるのは嫌なので オートマトニストにもなります><
195:デフォルトの名無しさん
09/07/29 19:59:04
もういいから消えろよ
196:デフォルトの名無しさん
09/07/29 23:55:35
aaa/bbb/ccc
aaa/bbb/ddd
aaa/ccc/eee
・
・
・
上のような文字列があって正規表現での検索時間(grepとか)を速くしたいと思っていますが、
高速化するために正規表現の合成?みたいなことができるようなライブラリってありますでしょうか?
検索したい文字列のリストはだいたい1行が30~40文字程度で100行~200行ほど
検索対象はファイルサイズで400Mbyte~6Gbyteぐらいです。
197:デフォルトの名無しさん
09/07/30 00:09:32
質問をもっと推敲しろ
198:デフォルトの名無しさん
09/07/30 00:10:30
必要ない行はgrepで飛ばして読めばおk
199:デフォルトの名無しさん
09/07/30 00:13:49
grepパイプでつなげば十分なんじゃね?
200:デフォルトの名無しさん
09/07/30 00:46:05
パイプって言いたかっただけやんwww
201:デフォルトの名無しさん
09/07/30 03:14:06
>>199
せめて -e を並べるか -f だろー。
202:デフォルトの名無しさん
09/07/30 09:14:17
fgrep使うのが正解
203:デフォルトの名無しさん
09/07/30 12:45:55
いつから言葉遊びをするスレになったのですか?
204:デフォルトの名無しさん
09/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
09/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:デフォルトの名無しさん
09/07/30 15:49:13
うん、わかるね
207:204
09/07/30 15:56:54
URLリンク(msdn.microsoft.com)にいいのがありますた。
1)は
(')([^']+)(')→\"\2\"
''→'
の2つでいけるかなぁ…
208:204
09/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
09/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
09/07/30 16:40:36
最初から地にEEがあるとEになっちゃうか。
横着せずに引用符の中のEEだけをもどさないとだめだな。
211:デフォルトの名無しさん
09/07/30 19:06:52
ダブルクォートの中にカンマを含むフィールドのことを考えると
正規表現よりは文脈自由言語でパースしたほうが絶対にいい
212:204
09/07/31 10:43:27
かも知れないけど、開発の立ち上げ工数と、今後のメンテを考えるとなー。
(あまり入出力仕様は変わらないと思うが、日付フォーマット変換の追加がありうる)
正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。
また、必ずしも完璧に作る必要はなくて、
ユーザが業務で使うごく一般的なフォーマット文字列を通せれば後は制限事項でもいいし。
それをいえば、想定顧客に、浮動小数点使ってる人なんていないんじゃないかと思うけどね。。。
213:デフォルトの名無しさん
09/07/31 11:31:23
>>212
> 正規表現ならそれなりに触れるエンジニアはいくらでもいるわけで。
いねーだろ。どの口が言ってんだ?あん?
214:デフォルトの名無しさん
09/07/31 11:58:34
ていうかここって日記スレなのか?
215:デフォルトの名無しさん
09/07/31 12:16:24
正規表現はフィットする目的には早く書けるけど、保守性は悪いし実行
速度は遅いしで、まともなプロジェクトには使わないよ。
216:デフォルトの名無しさん
09/07/31 12:21:08
まともでないプログラマ乙
217:デフォルトの名無しさん
09/07/31 12:24:55
>>216
>>204 に回答してから言えよ。
218:デフォルトの名無しさん
09/07/31 12:27:31
言うほど保守性が悪いとも思わないし、実行速度も
用途に十分なら別にかまわんしなぁ。
むしろ正規表現使わずにだらだら書かれたほうが
見通しが悪くて遅い場合も多い。適材適所。
219:デフォルトの名無しさん
09/07/31 12:28:28
>>218
>>204 に回答してから言えよ。
220:デフォルトの名無しさん
09/07/31 12:33:32
>>219
問題がよくわかんないし、javaとexcelだしスルー。
221:デフォルトの名無しさん
09/07/31 12:37:46
そもそも便所の落書きに仕事を持ち込まれても知らんし。
222:デフォルトの名無しさん
09/07/31 13:14:57
>>212
正規表現で書かれたフィルタのバグ取りなんてぞっとする
ちゃんとした技術者なら、RFCにCSVのBNFがそのまま載ってるんだから
BNFの通りにコーディングすりゃ
テスト含めて1日で終わるよ
223:204
09/07/31 13:15:56
>>213
おっと確かに! 居ないからこそ、漏れがやる羽目になっとるわけだがwww
(出来る人に空きが無いという理由もある)
しかしま、コトは相対比較で十分なんで。
>>221
まあねえ。ML探して加入して自己紹介して
過去ログ検索して質問投げるってのが本来なんだろうが。
でもURLリンク(www.rubular.com)とかでちょこちょこやるうちに
何とかなりそうな気がしてきた。
224:デフォルトの名無しさん
09/07/31 13:26:42
>>207
'''hoge' みたいなパターンがダメなのでは。
>>205 がよくわからんのだが、正規表現の変換処理のリスト (filterlist) を積んで、
executeFilters() でそれらを順番に逐次処理して適用する、ということ?
そんなん絶対うまくいかんと思うが。
225:デフォルトの名無しさん
09/07/31 13:43:19
絶対入力するなよ!絶対だぞ!絶対入れるなよ!
で切り抜けるんだろう
226:デフォルトの名無しさん
09/07/31 13:56:39
>>211
だよねー。
Java は良く知らないんだが、 JavaCC とか使えばスッキリ書けないのかね?
227:デフォルトの名無しさん
09/07/31 14:17:27
CSV扱うライブラリぐらいjavaにもありそうなもんだけどな。
228:デフォルトの名無しさん
09/07/31 16:40:25
Javaでも20行未満で書けるレベルの処理だろうに。
229:デフォルトの名無しさん
09/07/31 16:50:34
>>228
お前がそれをさっさと書かないからこのネタが延々と終わらんだろうが。
230:デフォルトの名無しさん
09/07/31 16:56:53
ライブラリあるの?
231:デフォルトの名無しさん
09/07/31 16:57:34
SuperCSVオススメ
232:デフォルトの名無しさん
09/07/31 18:02:03
>>228
期待age
233:デフォルトの名無しさん
09/08/01 04:17:10
それをここでやるのはスレ違い。
234:デフォルトの名無しさん
09/08/01 08:51:21
逃げる気か?
235:デフォルトの名無しさん
09/08/01 10:11:53
>>234
あんた馬鹿?
236:デフォルトの名無しさん
09/08/01 12:43:12
逃げやがったな。口だけ達者で、ほんとは何も出来ないヤツw
237:デフォルトの名無しさん
09/08/01 12:45:19
>>236
あんた馬鹿?
238:デフォルトの名無しさん
09/08/01 13:24:30
負け犬めガッ!一生逃げ回ってろ
239:デフォルトの名無しさん
09/08/01 13:29:08
なにこの粘着質
240:デフォルトの名無しさん
09/08/01 13:30:20
質問者でしょ。それ以外に利益のある人はいない
241:デフォルトの名無しさん
09/08/01 13:33:21
人生の敗北者!
242:デフォルトの名無しさん
09/08/01 13:44:54
質問者はもっと回答者に敬意を持って接しろ
243:デフォルトの名無しさん
09/08/01 14:01:48
愉快犯の荒らしだろ。放置推奨
244:デフォルトの名無しさん
09/08/01 23:44:50
228 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/31(金) 16:40:25
Javaでも20行未満で書けるレベルの処理だろうに。
↑
できもしないことを、いい加減に書くのは、質問者に対して失礼。
第三者も見ていて不愉快。
おまいこそ最悪の荒らし!
245:デフォルトの名無しさん
09/08/02 00:07:19
そんなに粘着する必要あるのかと。
>>228が無知で、何も知らずに発言しちゃっただけかも知れないんだぜ?
くだらないプライドを守っている暇があったら、勉強して技術向上して
人生をエンジョイした方が、オタク(というかハッカー精神)的に
意味のあるものになるんじゃないのかね?
246:デフォルトの名無しさん
09/08/02 00:26:43
なにしにきたんだよ もう帰れよ
247:デフォルトの名無しさん
09/08/02 06:43:38
Javacに一行の文字数制限があったかどうかが
気になってしようがないわけだが。
248:デフォルトの名無しさん
09/08/02 11:29:02
無知で、何も知らないならレスしないでください。
249:デフォルトの名無しさん
09/08/02 11:42:35
そもそも 204って質問だったのか?
アドバイスが欲しいらしいのはわかるが、お願いします的なセリフは何も書いてないだろ
ウゼー独り言延々書き込んでるやつがいるなぁ位の認識だったんだが。
250:デフォルトの名無しさん
09/08/02 16:12:46
珍しく伸びていると思えばこれか
251:デフォルトの名無しさん
09/08/02 16:38:58
喧嘩嫌
252:デフォルトの名無しさん
09/08/02 16:54:39
>お願いします的なセリフは何も書いてないだろ
www
苦しい言い訳。
「お願いします」口調なら、「Javaでも20行未満で書けるレベルの処理」になるのかい?
253:デフォルトの名無しさん
09/08/02 16:59:48
まあ書いてやってもいいかな、くらいだけどな
254:デフォルトの名無しさん
09/08/02 23:12:00
>>253
中学生2年生かおまいは
255:デフォルトの名無しさん
09/08/03 05:00:11
中学生はジャポニカ学習帳でも焼いて食ってろ
256:デフォルトの名無しさん
09/08/03 07:08:27
中学二年生にだって天才はいるかもだろ
ニヤニヤと見守るのがベター
257:デフォルトの名無しさん
09/08/03 13:34:29
おっと~!自称「天才」中学2年生現る!
・・・で?20行で書けないの?天才さんw
258:デフォルトの名無しさん
09/08/03 13:35:10
今なら30行に負けてあげてもいいんだけど
259:デフォルトの名無しさん
09/08/03 19:18:18
マジキチ
260:デフォルトの名無しさん
09/08/03 19:21:17
土日は遊んでたので見てなかったがまだやってんのか。ヒマだね~
261:デフォルトの名無しさん
09/08/03 20:25:05
どうした?30行でも不足か?
そっちが20行と言ったから20行なわけで。
べつに、40行でも50行でも構わんのだがな。
262:デフォルトの名無しさん
09/08/03 20:27:15
マジキチ
263:デフォルトの名無しさん
09/08/03 20:37:57
>Javaでも20行未満で書けるレベルの処理だろうに。
こいつ、恥ずかしくなって逃げたのか。布団かぶって泣いてるのか?
264:デフォルトの名無しさん
09/08/03 20:43:09
マジキチ
265:デフォルトの名無しさん
09/08/03 23:36:06
なんだこの流れ
Javaよくわからんから20行が無茶ぶりなのかどうか知らんけど
一体何が夏厨の琴線に触れちゃったの?
質問者不在で誰も求めてないコード請求してもしょーがなくね?
266:デフォルトの名無しさん
09/08/03 23:43:39
生理の日かアレな人かどちらか
267:デフォルトの名無しさん
09/08/03 23:49:27
javaで20行書くのに、いったい何日かかってんだよ。
速いとこコードを晒せ。それですべて解決する話だろ?
268:デフォルトの名無しさん
09/08/03 23:55:01
マジキチ
269:デフォルトの名無しさん
09/08/04 07:15:52
おはよう!10行くらい書けた?まだかな?
270:デフォルトの名無しさん
09/08/04 07:38:06
酔っぱらいに絡まれた感じってこんなんだよな
271:デフォルトの名無しさん
09/08/04 08:03:12
schemeでCSVパーサを書いた
BNF通りのCSVの定義が19行、呼び出し8行、コンビネータパーサ80行
しかしよ、実はCSVのパースなんか全く関係なくて
問題はDecimalFormatのパースじゃねーか
URLリンク(sdc.sun.co.jp)
ここにBNFライクな仕様が載ってるから
これをパース後数値にして、コンマ/改行で区切って出力すりゃいい
楽をするならJParsec
272:デフォルトの名無しさん
09/08/04 08:29:37
Javaなら20行で書ける!
273:デフォルトの名無しさん
09/08/04 09:08:46
そもそも大抵の言語は1行にいくらでもつめられるからできて当たり前ww
pythonだと難しいかもな。
274:デフォルトの名無しさん
09/08/04 09:17:44
↑
世間を知らない井の中の蛙
275:204
09/08/04 09:41:26
土日は自宅プロバイダの書込制限ですまそ。現状はこんな感じ。網羅的テストはまだ。
エスケープ処理が多重にかかるのでちとわかりにくいかも。
引用符の外側を一撃で取れないので、
内側の退避と復旧手順が入って無駄に複雑になってます。
引用符のパースはjavaでかけるべきだったかな…
/**
* 正規表現パターン文字列と、置換文字列で1セット。上から順に解釈適用する。
*/
public static final String[][] FORMAT_FILTER_ARRAY = {
//////////////////////
//浮動小数点対応
//引用符の中のEだけをEEに退避
{"([^']+)(')([^']+)(E)([^']+)(')([^']+)", "$1$2$3EE$5$6$7"},
//浮動小数点のEをE+に
{"(.*)([#0])(E)([#0])(.*)", "$1$2E\\+$4$5"},
//退避したEEをEに戻す
{"([^']+)(')([^']+)(EE)([^']+)(')([^']+)", "$1$2$3E$5$6$7"},
//////////////////////
// シングルクォート囲みをダブルクォート囲みに
{"(')([^']+)(')", "\"$2\""},
{"''", "'"},
//////////////////////////////
//多重エスケープ対応
//
//多重にエスケープ処理が走るため。\1個でも\を出せるように倍にしておく。
{"\\\\", "\\\\\\\\"}
};
276:204
09/08/04 09:43:17
あと、変換対象データが整数の場合だけの処理も入れざるを得なくなった。
小数点を最後に残すExcelの仕様のせい。
/**
* 整数値の後ろの余分な小数点を削除する。
* ここでは引用符は"に、浮動小数点はE+に変換後なので注意。
*/
public static final String[][] DOT_FILTER_ARRAY = {
//////////////////////
//整数の場合の余分な小数点対応(浮動小数点で無い場合)
//引用符の中の.#を..#に退避
//{"([^\"]+)(\")([^\"]+)(\\.#+)([^\"]+)(\")([^\"]+)",
{"([^\"]*)(\")([^\"]*)(\\.#+)([^\"]*)(\")([^\"]*)",
"$1$2$3\\.$4$5$6$7"},
//浮動小数点の#.#E#を#..#E#に退避 上の変換とは重ならない。
{"(.*)([0#])(\\.#+E\\+[0#])(.*)", "$1$2\\.$3$4"},
//上記変換対象にならなかった-つまり..#でない.#+を削除
{"(.*)([^\\.])(\\.#+)(.*)", "$1$2$4"},
//浮動小数点の#..#E#を#.#E#に復旧。引用符の中の外し方がわからない。
{"(.*)([0#])(\\.)(\\.#+E\\+[0#])(.*)", "$1$2$4$5"},
//引用符の中の..#を.#に復旧
//引用符の中にもともと..#があっても、...#になって..#に戻るはず。
{"([^\"]*)(\")([^\"]*)(\\.)(\\.#+)([^\"]*)(\")([^\"]*)",
"$1$2$3$5$6$7$8"}
};
277:デフォルトの名無しさん
09/08/04 09:49:56
これ見たら >>218 とかブン殴りたくなってきたんだが。
278:204
09/08/04 09:51:49
20行の成否はどうでもいいんだけど、もし可能であれば教示していただけるとうれしい。
仕事はともかく、美しいコードには感動があるのでね。
(とはいえ、他人が見てわからないコードはよろしくないので、
無理に圧縮した20行より、読みやすい100行の方がいいけど。)
>>224
n回フィルターすると、フィルター相互の矛盾衝突のチェックがn(n-1)必要になるから、
フィルターが増えるほど加速的に困難になる…という趣旨ですよね。
しかし、3行1セットで1個の処理をするフィルターを作成し、
そのセットが他には絶対に影響を与えない堅固なものであれば、
必ずしもn(n-1)にはならないのではないか…と思って手をつけたわけですが…
しかし実際やってみるとそうはなってませんな…引用符処理が誤算でした。
279:デフォルトの名無しさん
09/08/04 09:56:00
おい、ここはニートのスレですか?
280:デフォルトの名無しさん
09/08/04 09:59:41
なんだなんだ、また日記が始まるのか
281:204
09/08/04 10:05:11
いやいや、みなさんオチがついてないと気持ち悪いでしょ。サービスのつもりだったんだけど。
もう一区切りついたんで書き込みやめとくよ。(何が出来て何が出来ないかはわかったという趣旨)
あと>>224さんの'''hoge' 難問ですわ…ご指摘ありがとうございました。
282:デフォルトの名無しさん
09/08/04 10:48:27
あーウザかった
283:デフォルトの名無しさん
09/08/04 11:00:43
マジキチ
284:デフォルトの名無しさん
09/08/04 12:21:32
Javaでも20行未満で書けるレベルの処理だろうに。
285:デフォルトの名無しさん
09/08/04 12:31:48
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
286:デフォルトの名無しさん
09/08/04 21:43:50
マジキチ
287:デフォルトの名無しさん
09/08/04 21:52:53
/:::::::ヽ____/::::::::ヽ、
丿 ::.__ .::::::::::::: __ ::::ヽ_ ,. 、 / /
/ /。 ヽ_ヽv /: /。ヽ ::::::ヽ ,.〃´ヾ.、 / /
/ / ̄ ̄√___丶  ̄ ̄\ ::::| / |l ', / /
| .:::::::::: / / tーーー|ヽ ..::::: ::|r'´ ||--‐r、 ', javaなら20行で書ける!!
| .:::::. ..: | |ヽ .,..ィ'´ l', '.j '. javaなら20行で書ける!!
| ::: | |⊂ニヽ| | 'r '´ ',.r '´ !| \
| : | | |:::T::::| ! l! ....:.:.:.:.:.:ヽ、 ,l \
\: ト--^^^^^┤ ゝ、.,_ ---‐‐‐----ゝ、ノ
288:デフォルトの名無しさん
09/08/04 22:34:41
マジキチ
289:デフォルトの名無しさん
09/08/05 15:37:17
>>Javaなら20行でできる
専用スレ立ててやれ
290:デフォルトの名無しさん
09/08/05 16:35:23
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
291:デフォルトの名無しさん
09/08/05 17:57:53
>>289
もう終わった話に一人で何言ってんの?
292:デフォルトの名無しさん
09/08/05 18:09:20
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
293:デフォルトの名無しさん
09/08/05 23:40:59
perlで7行スレは盛り上がったのになんだこの流れ
294:デフォルトの名無しさん
09/08/05 23:51:53
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 |
295:デフォルトの名無しさん
09/08/06 09:14:15
正規表現使うんならperlかpythonあたりいくだろ。javaはないわ。
296:デフォルトの名無しさん
09/08/06 09:36:03
正規表現使うのが目的ならな。
297:デフォルトの名無しさん
09/08/06 10:22:39
正規表現使わなくてもjavaなら20行未満で書けるよ。
298:デフォルトの名無しさん
09/08/06 10:53:47
>>297
おい!できるならとっとと書いてみろよ。
逃げんじゃねーぞこの口だけ野郎が!
299:デフォルトの名無しさん
09/08/06 14:40:55
>>297
あ?どうしたコラ!
はやくしろよ。
また逃げたのかなw 布団被って泣いているのかな?w
300:デフォルトの名無しさん
09/08/06 15:07:24
人にものを頼む態度じゃないな
301:デフォルトの名無しさん
09/08/06 15:25:36
ああん?
「書ける」 とは言ったが 「書く」 とは言ってない。
書いて欲しかったら頭を下げてお願いしろ。
それが礼儀だろ。
・・・って言いたいのか?中学生か、おまいは!
302:デフォルトの名無しさん
09/08/06 15:41:38
と、小学生みたいな発言している人がいますね
303:デフォルトの名無しさん
09/08/06 17:35:45
で、いつになったら発表してくれるの?>> 20行クン
今なら30行に負けてあげてもいいと言ってるんだし、
そもそも、こっちは行数なんて問題にしてないから
100行だろうが1000行だろうが好きなだけ費やしてもいいんだよ。
早く書いてごらんよ。どうせ書けないんでしょ?
書けもしないのにテキトーなことを言ったんでしょ?
304:デフォルトの名無しさん
09/08/06 18:28:46
怒ってもいいことなんてひとつもない。
305:デフォルトの名無しさん
09/08/06 20:07:09
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
306:デフォルトの名無しさん
09/08/06 20:11:55
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
307:デフォルトの名無しさん
09/08/06 22:54:49
/ ドッカン
/ / ,,_ ドッカン
━━━'), )= ☆ゴガギーン
∧_∧ヽ\ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ) 〉 〉_ _ ____ ∧_∧ ∠ おらっ!20行で書いてみろ
/ ⌒ ̄ / "'''"'| || (`∀´ ) \___________
| | ̄l | |/ / \
. | | | | || | | /\ヽ
| | .| | | へ//| | | |
( | .| ロ|ロ ゙!l''ヽ/,へ \|_ | | |
| .lヽ \ | | ヽ\/ \_ / ( )
| .| 〉 .〉 | | | |
/ / / / | | 〈| | |
/ / / / | | || | |
/ / / / └─┴─┘ | |
308:デフォルトの名無しさん
09/08/07 02:26:58
ウケるのは最初の一回だけだぞ。
309:デフォルトの名無しさん
09/08/07 10:12:05
夏休みが終わるまではこんな調子が続くだろうからいくら言っても無駄だろうね。
310:デフォルトの名無しさん
09/08/13 17:30:46
なスレ汚し奉りそ
311:デフォルトの名無しさん
09/08/13 22:48:37
置き換えや検索を希望する訳ではないのですが、
[!#-'*-;=?-~]
が一体どういう動きをしているか知りたいです
一応説明では「URL文字にマッチ」となっているのですが、
どこがどのようにしてそれらの文字にマッチするよう働いているのか分かりません
環境は鬼車です
312:311
09/08/14 00:06:06
すみません自己解決しました
しばらく調べていたら範囲指定がらみで動いていたということが分かりました
どうもすみません
313:デフォルトの名無しさん
09/08/17 19:35:58
●正規表現の使用環境
鬼車
●検索か置換か?
置換
●説明
( から ) までの文字列にマッチ
マッチした文字列中に ABC が含まれている場合は
置換時に ABC を \1 で参照できる正規表現
●対象データ
smp("桁数:" + strABC.length);
smp("行数:" + cnt);
●希望する結果
smp(ABC);
smp();
検索文字列
\([^\)]*?(ABC)?[^\)]*?\)
置換文字列
(\1)
で試してみたのですが、ABCがある行も無い行も全て
smp(); になってしまいました。
どのように記述すればABCを取り出せるのか教えてください。
314:デフォルトの名無しさん
09/08/17 20:48:23
? 付け過ぎ
315:デフォルトの名無しさん
09/08/17 21:25:22
*?(ABC)? の部分が、"何もない" 状態にいきなりマッチするからじゃね?
場合分けの部分を親言語に任せる方が、文字列の否定を使うより楽かもしれない。
316:デフォルトの名無しさん
09/08/17 21:54:46
エディタの置換機能で実現したいので、こうなってます。
.*?の?は、付けておかないと(ABC)?.*?の部分に入ってくれないかと思い付けました。
結果的にマッチしていないので無意味ですが。。。
何か方法はありませんか?
317:デフォルトの名無しさん
09/08/17 22:13:33
3ステップに分ければ簡単だが
(1) smp\(.*(ABC).*\) → xxxxxxxxxxx(\1)
(2) smp\(.*\) → smp()
(3) xxxxxxxxxxx\((.*)\) → smp(\1)
318:デフォルトの名無しさん
09/08/17 22:30:30
ABCがマッチする場合|ABCがマッチしない場合
319:デフォルトの名無しさん
09/08/17 22:59:43
Javaでも20行未満で書けるレベルの処理だろうに。
320:デフォルトの名無しさん
09/08/17 23:02:20
正規表現は魔法じゃ無い!
321:デフォルトの名無しさん
09/08/17 23:16:18
>>319
またお前か。
エディタ上で使うって言ってるだろ。
何調子乗ってんだ?
322:デフォルトの名無しさん
09/08/17 23:18:12
>>319
と言うかその前に、JavaでCSV処理の話はどうなったんだ?
逃げたと思ったらコレだよ。
とっとと書いてみなよ20行君。
いや30行でも100行でもいいからさ。
323:デフォルトの名無しさん
09/08/18 07:48:03
この余白はそれを書くには狭すぎる
324:デフォルトの名無しさん
09/08/18 13:13:17
鬼車ってなんかエロい
325:デフォルトの名無しさん
09/08/18 14:03:04
>>324
kwsk
326:デフォルトの名無しさん
09/08/18 14:56:49
>>321
>>322
おいおい、釣りで書いてるだけだろ
なにヒートアップしてんだ
327:デフォルトの名無しさん
09/08/18 15:00:43
/\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
328:デフォルトの名無しさん
09/08/18 21:57:51
マジキチ
329:デフォルトの名無しさん
09/08/18 23:01:57
お願いします。
●正規表現の使用環境
bash(grepかegrepでお願いします。)
●検索か置換か?
置き換え
●説明
2行を1行にまとめたい。
●対象データ
>
(hogehoge.pampam)
●希望する結果
>(hogehoge.pampam)
ワガママ逝って申し訳ないのですが、
できればgrepだけで出来れば最高です。
330:デフォルトの名無しさん
09/08/18 23:19:33
>>329
grepに置換機能はないからムリ。
2行毎につなげるだけだったら、
#!/bin/sh
while read line
do
read line2
echo "$line$line2"
done
でよくない?
331:デフォルトの名無しさん
09/08/19 00:16:07
grepで置き換えとか無理だろ。
Javaなら20行未満で書けるレベルの処理だが。
332:デフォルトの名無しさん
09/08/19 00:35:11
>>331
は? 置換だけならJavaでも10行未満でいけるだろ。
それより20行未満でCSV処理はどうなったのかな?
布団被って泣いてるのかな?w
333:デフォルトの名無しさん
09/08/19 04:12:55
まー落ち着けよ。
Javaなら20行未満で書けるレベルの処理で大人気ないな
334:デフォルトの名無しさん
09/08/19 04:21:09
とりあえず落ち着きませんか?
Javaなら20秒未満で書けるレベルの処理で大人気ないと思いますよ
335:デフォルトの名無しさん
09/08/19 07:14:09
これは落ち着いたほうがいいかもわからんね
Javaなら20%未満のやる気で書けるレベルの処理で大人気ないっていう感想を持つ人もいるだろうし
336:デフォルトの名無しさん
09/08/19 08:05:54
以上、正規表現もJavaも全く解らない人たちが大喜びの映像をお届けいたしました。
337:デフォルトの名無しさん
09/08/19 08:22:25
Javaなら20行未満で書けるレベルの処理で勝利宣言されてもなあ…
338:デフォルトの名無しさん
09/08/19 10:51:23
sedでいいじゃない
339:デフォルトの名無しさん
09/08/19 10:58:45
javaでいいじゃない
340:デフォルトの名無しさん
09/08/20 08:01:32
viで
341:デフォルトの名無しさん
09/08/20 10:41:35
javaで書ける、って言うけど
どうせ javaで正規表現を書くんだろ?
pattern = Pattern.compile("\\([^\\)]*?(ABC)[^\\)]*?\\)");
みたいな。やたら \ が増えまくって、かえって見にくい。
ディレクトリの区切り文字の \ にマッチさせるのに
pattern = Pattern.compile("\\\\");
って \ を4回も書かなきゃならん。 \ 地獄だ。武○士だ!
342:デフォルトの名無しさん
09/08/20 12:05:04
Emacs Lisp の正規表現に比べたら別に大したことない。
343:デフォルトの名無しさん
09/08/20 18:33:59
>>341
ん?
\xがエスケープシーケンスになる言語はみんなそうなんじゃないの?
>>342
うむ。
344:デフォルトの名無しさん
09/08/20 19:41:20
>>343
文字列から生成する場合に限ればな
正規表現リテラルが存在する言語ならそれに付き合う必要はない
345:デフォルトの名無しさん
09/08/20 21:01:57
あーそうだった。忘れてた。thx
346:デフォルトの名無しさん
09/08/20 21:19:05
> pattern = Pattern.compile("\\\\");
ワロス
アホすぎるwww
347:デフォルトの名無しさん
09/08/20 21:43:56
よし、夏休み最後の一週間はJavaを勉強しちゃうゾ! ><
348:デフォルトの名無しさん
09/08/21 20:54:36
>>347
20行係を任ず
349:デフォルトの名無しさん
09/08/23 19:53:56
正規表現を使いこなしてる人でも、間違った正規表現を書いちゃうことってよくあるの?
350:デフォルトの名無しさん
09/08/23 19:57:39
間違った正規表現すら使いこなすよ
351:デフォルトの名無しさん
09/08/23 21:52:56
間違ってる事がわからないから、全部正解
352:デフォルトの名無しさん
09/08/23 23:10:06
想定したパターンが間違ってたってことは割とある
単語の文字列にハイフンが含まれることを考慮してなかったり
353:デフォルトの名無しさん
09/08/24 22:19:40
>>330
すんません、ありがとうございます。
シェルよくわからんのでしたが、すんごい参考になりました。
おかげでなんとか出来ました。
ありがとうございます。
354:デフォルトの名無しさん
09/08/25 00:05:17
日本語版でないですかね
Regular Expressions Cookbook
URLリンク(oreilly.com)
URLリンク(www.amazon.com)
355:デフォルトの名無しさん
09/08/25 16:48:49
色々試してみたのですがうまく動かないので教えてください。
●正規表現の使用環境
PHP 5.2.5
●検索か置換か?
検索 & 置換
●説明
絵文字用の文字列変換を考えています。
フォームのテキストエリアに入力された文字列から
##で囲まれた文字列を検索し置換したい。
●対象データ
いい天気ですね##A0F1##!!
(AF01は固定ではないです)
●希望する結果
##AF01##にヒットし、さらにAF01のみに置換したい。
自分が考えた正規表現は /#[2][A-F|0-9]{4}#[2]$/u
ですが、うまく動きません・・どなたかお願いします。
356:デフォルトの名無しさん
09/08/25 17:16:28
PHPはよう知らんが
s/##([A-F0-9]{4})##/$1/g
じゃないのか?
357:デフォルトの名無しさん
09/08/26 01:11:44
>じゃないのか?
って。
そうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。
358:デフォルトの名無しさん
09/08/26 01:12:25
>じゃないのか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。
359:デフォルトの名無しさん
09/08/26 10:11:15
いま、ものすごくバカっぽいレスを目にした気がした。
360:デフォルトの名無しさん
09/08/26 11:21:38
>どうして質問を質問で返すんだろ。
「質問を質問で返すな」と言い切る自信はないらしい。
361:355
09/08/26 11:28:27
>>356
ご返信ありがとうございます。
試してみたのですが、期待した動作にならなかったです。
362:デフォルトの名無しさん
09/08/26 12:28:28
>>357
ろくに回答もせず、人のレスに難癖付けるだけ、か…
哀れだな
363:355
09/08/26 14:10:51
あれから、色々自分で試行錯誤して
/#{2}([A-F|0-9]{4}#{2})/
でヒットするところまでは持っていけました。
後はなんとかなりそうなので、がんばってみます。
なんだかスレが荒れてしまったみたいで申し訳ありません。
364:デフォルトの名無しさん
09/08/26 14:19:43
おかしいのがはりついてるせいだから、あんま気にせず。
365:デフォルトの名無しさん
09/08/26 14:26:40
PHPはよう知らんが >>356 のでいけたよ。
# s/.../.../g とかは Perl 特有な演算子なのでそこらへんはよしなに
$str = preg_replace('/##([A-F0-9]{4})##/', '$1', $str);
これでどうですか?
366:デフォルトの名無しさん
09/08/26 14:55:40
>これでどうですか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。
367:デフォルトの名無しさん
09/08/26 15:17:15
マジレスすると
(?:^|[^#])
##([A-F0-9]{4})##
(?:$|[^#])
368:デフォルトの名無しさん
09/08/26 15:28:42
「これでどうですか?」は質問じゃないだろ。
369:367
09/08/26 15:54:37
ん?
「####AF01##」のような文字列も置換していいのか。
条件反射してすまなかった。
370:デフォルトの名無しさん
09/08/26 16:36:03
/#{2}([A-F|0-9]{4}#{2})/ の縦棒(|)は多分こういう意味では?と予想。
/#{2}([A-F]{2}[0-9]{2})#{2}/
371:デフォルトの名無しさん
09/08/26 17:08:01
>>370
「対象データ」の「##A0F1##」にマッチしなさそう、とか。
372:デフォルトの名無しさん
09/08/26 17:40:08
>>370
文字クラスの連結のつもりだったとエスパー。
373:デフォルトの名無しさん
09/08/26 17:46:50
355です。
>>365
ありがとう!まさにこれが期待した動作です。
Perlに詳しくなかったのでPHP風に直せなかった自分の力不足で
動かなかったなどと言ってすみませんでした。
>>367
####AF01##は##「##AF01##」の部分だけ置換したいと思っています。
##は意味もなく使わせないようにしたいのですが、ユーザーがどういう意図で
使うかはわからない部分もあるのでそうしています。
後は答えていただいた方法をうまく組み込んでみます、ありがとうございました。
374:デフォルトの名無しさん
09/08/26 17:51:36
>>372
A-F|0-9はうまい方法が思いつかなかったのでこうしてます。
要するにA-Fまでと0-9までの半角英数字4文字が続いている場合となります。
0CAFの場合もありますし、DA16など4文字は確定で入り乱れている状態です。
これをうまく表現する方法がわからなかったので
調べながら書いてみたら動いたのでとりあえずこれでやってました。
375:デフォルトの名無しさん
09/08/26 18:01:24
>>374
[A-F|0-9]は、A-Fか0-9か'|'という意味だ。
つまり[|A-F0-9]や[A-F0-9|]も同じ意味になる。
おまえがやりたいことは[A-F0-9]で出来る。
まだ正規表現に慣れていないみたいだが、
Webアプリ開発では必須のスキルなので
これから勉強していくといい。
まずはフクロウ本を買うところから始めるべし。
376:デフォルトの名無しさん
09/08/26 19:23:33
| は ( ) の中で使うときと { } で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。
377:誤字った
09/08/26 19:24:20
| は ( ) の中で使うときと [ ] で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。
378:デフォルトの名無しさん
09/08/26 19:38:26
>>377
自己紹介?
379:デフォルトの名無しさん
09/08/26 19:40:23
( ) の中ってなに。。
380:デフォルトの名無しさん
09/08/26 20:38:26
{}かな。
381:デフォルトの名無しさん
09/08/26 23:33:37
拗音の「ぁぃぅぇぉゃゅょァィゥェォャュョ」と促音の「っ」が複数個連続した場合にSAPI5を使うソフトウェアがハングアップします。
ところが「うわぁぁぁぁ」のような表現は日常的に存在しているためにそのたびにハングアップして閉口してます。
正規表現で小さい文字を大きくすることは可能ですか?
382:デフォルトの名無しさん
09/08/26 23:40:53
ょぅι゛ょ
383:デフォルトの名無しさん
09/08/26 23:54:43
s/ょぅι゛ょ/ 妖女/
384:デフォルトの名無しさん
09/08/26 23:57:31
こすると大きくなるよ
385:デフォルトの名無しさん
09/08/27 00:04:25
こすったら膿出てきた
386:デフォルトの名無しさん
09/08/27 00:18:54
淋しい病気ですか
387:デフォルトの名無しさん
09/08/27 00:32:52
>>386
下手糞なツッコミ
もっと激しく!!
388:デフォルトの名無しさん
09/08/27 10:57:46
>>381
s/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/g
389:デフォルトの名無しさん
09/08/27 11:01:29
性器表現だけじゃできなそうだな。
390:デフォルトの名無しさん
09/08/27 11:20:00
tr/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/
s/ぁ/あ/g
s/ぃ/い/g
s/ぅ/う/g
s/ぇ/え/g
s/ぉ/お/g
s/ゃ/や/g
s/ゅ/ゆ/g
s/ょ/よ/g
s/ゎ/わ/g
s/ァ/ア/g
s/ィ/イ/g
s/ゥ/ウ/g
s/ェ/エ/g
s/ォ/オ/g
s/ヶ/ケ/g
s/ャ/ヤ/g
s/ュ/ユ/g
s/ョ/ヨ/g
s/ヮ/ワ/g
391:デフォルトの名無しさん
09/08/27 18:29:07
どうでもいいけどそれは SAPI5 とやらを直すべきではないのか?
392:デフォルトの名無しさん
09/08/27 19:12:10
マッチするなら電子メールアドレスである事が保証できる
正規表現を教えて下さい
393:デフォルトの名無しさん
09/08/27 19:24:33
完全にやるのはひどくおおごとで、
かつルール違反のアドレスが結構ある。
とりあえず使えればいいのであれば、メールアドレス 正規表現 で検索
394:デフォルトの名無しさん
09/08/27 19:44:38
DoCoMoもauも、ちょっと前までは連続ドット(RFC違反)の
メールアドレスが普通に作れちゃったから困ったもんだ。
395:デフォルトの名無しさん
09/08/27 19:52:12
>>392
まずググる、という発想すらできない君にはこれがお似合いだよ
.+@.+
396:デフォルトの名無しさん
09/08/27 21:16:55
>>391
「暗いと不平を言うよりも、すすんで明かりをつけましょう」
397:デフォルトの名無しさん
09/08/27 22:41:53
>>395
それじゃあ
> マッチするなら電子メールアドレスである事が保証できる
を満たしてないだろ。
これなら条件を満たすだろ。
[a-z]{6,30}@gmail.com
398:デフォルトの名無しさん
09/08/27 23:53:56
こっちの方がいい
[^@]+@gmail.com
399:デフォルトの名無しさん
09/08/27 23:58:02
>>397-398
やりがちだよなぁ、\.comとかのエスケープ忘れ
しかもそうそう異常判定が起きないから潜在的なバグになりやすい
400:397
09/08/28 00:26:28
>>399
ごめんなさい。反省します。
>>398
それだと「マッチするなら電子メールアドレスであることが保証できる」が満たせないよね。
401:デフォルトの名無しさん
09/08/28 00:57:19
命題トリックだな
402:デフォルトの名無しさん
09/08/28 01:02:24
連. はイケないとか
"に囲まれてるなら@も連.もおkとか
イカレてるわ
403:デフォルトの名無しさん
09/08/28 01:22:04
正規表現だけでなんとかしようって方がイカレてるわ
404:デフォルトの名無しさん
09/08/28 09:38:08
到達できないアドレスは電子メールアドレスとして保証されていると言えるの?
405:デフォルトの名無しさん
09/08/28 12:21:25
一般的には言えないかもしれないけど、
そこはこのスレのお題の範疇を超えるんで、気にしなくて良いんじゃないかと思う。
406:デフォルトの名無しさん
09/08/28 12:30:48
俺はKENT氏が使っているこれを利用してるけど
/[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/
407:デフォルトの名無しさん
09/08/28 13:25:52
KENT氏(笑)
408:デフォルトの名無しさん
09/08/28 13:30:29
KENT氏()笑
409:デフォルトの名無しさん
09/08/28 13:39:48
はいどうぞ URLリンク(www.din.or.jp)
410:デフォルトの名無しさん
09/08/28 13:43:16
>>409
うんざりしたw
これはRFCが悪い。
411:デフォルトの名無しさん
09/08/28 14:27:48
>>406
これはひどい。
local-partの記号類をまったく受け付けないじゃん。
Gmailの拡張アドレスが弾かれちゃうね。
412:デフォルトの名無しさん
09/08/28 14:29:02
>>411
「マッチするなら電子メールアドレスである事が保証できる 」
を満たせばおkなんじゃないの?
413:デフォルトの名無しさん
09/08/28 14:37:11
極端な話だけど/foo@example\.com/も条件を満たすよ
>>397はそういうジョークだろう
414:デフォルトの名無しさん
09/08/28 15:24:14
>>412
そういう意味ならなおさら >>406 はまるでダメでしょ。
電子メールアドレスでないものも余裕でマッチする。
415:デフォルトの名無しさん
09/08/28 15:27:38
これはどうなん?
URLリンク(search.cpan.org)
416:デフォルトの名無しさん
09/08/28 15:33:15
>>415
ああ、俺もそれ使ってるわ。
日本語の解説はこれな。
URLリンク(blog.livedoor.jp)
417:デフォルトの名無しさん
09/08/28 15:40:45
>>416
そのページにあるリンク先見てて思ったんだが
[.] とか [@] って何の意味があるんだろ。
ときどき目にするんだが。。
418:デフォルトの名無しさん
09/08/28 16:04:50
>>417
[@]はあんまり意味がないと思うけど、[.]は\.を使うよりいい(見やすい?)と、Damian Conway先生が
言ってたような気がする。
419:デフォルトの名無しさん
09/08/28 16:16:48
>>415
そこに書いてある、このモジュールを使えばいいんかな?
RFC::RFC822::Address -- RFC 822 style address validation. - search.cpan.org
URLリンク(search.cpan.org)
420:デフォルトの名無しさん
09/08/28 16:43:24
>>417
[@] は配列が展開されるのを防ぐのかな?
421:デフォルトの名無しさん
09/08/28 16:47:38
>>409
ジョークか?
422:デフォルトの名無しさん
09/08/28 21:11:37
Javaでも20行未満で書けるレベルの処理だろうに。
423:デフォルトの名無しさん
09/08/28 21:23:59
>>422
それもう面白くないよ。
424:デフォルトの名無しさん
09/08/28 22:58:46
/:::::::ヽ____/::::::::ヽ、
丿 ::.__ .::::::::::::: __ ::::ヽ_ ,. 、 / /
/ /。 ヽ_ヽv /: /。ヽ ::::::ヽ ,.〃´ヾ.、 / /
/ / ̄ ̄√___丶  ̄ ̄\ ::::| / |l ', / /
| .:::::::::: / / tーーー|ヽ ..::::: ::|r'´ ||--‐r、 ', javaなら20行で書ける!!
| .:::::. ..: | |ヽ .,..ィ'´ l', '.j '. javaなら20行で書ける!!
| ::: | |⊂ニヽ| | 'r '´ ',.r '´ !| \
| : | | |:::T::::| ! l! ....:.:.:.:.:.:ヽ、 ,l \
\: ト--^^^^^┤ ゝ、.,_ ---‐‐‐----ゝ、ノ
425:デフォルトの名無しさん
09/08/29 02:27:04
ちなみにJavaなら20行未満で書けるぞ
426:デフォルトの名無しさん
09/08/29 07:51:01
\ 地獄ですね
427:名無しさん@そうだ選挙に行こう
09/08/30 09:40:01
「全然」が現れてから次の「。」までに「ない」「なく」「なかった」「ません」が来ない文にマッチさせるには?
428:名無しさん@そうだ選挙に行こう
09/08/30 12:41:16
/全然(?!ない|なく|なかった|ません).*。/
429:名無しさん@そうだ選挙に行こう
09/08/30 13:23:45
松来未祐と金田朋子のRADIOデコピンないと、ひぐらしのなく頃に、本当にすまなかったと思っている、うちのタマ知りませんか
等もマッチしなくなるよ
430:名無しさん@そうだ選挙に行こう
09/08/30 14:01:20
>>429
字面だけで処理しようってんだから、そこまで気にしてやる必要は無いんではないか
431:デフォルトの名無しさん
09/08/30 22:57:51
>>428
"全然勝負にならない。" にマッチしちゃうよ。
432:デフォルトの名無しさん
09/08/31 01:06:53
全然問題ない
全然なくならない
433:デフォルトの名無しさん
09/08/31 01:21:30
>>428
正規表現メモ
URLリンク(www.kt.rim.or.jp)
「よくある勘違い」
434:デフォルトの名無しさん
09/08/31 01:32:27
ツッコまれること前提で片手間に書いたのに、やっとツッコんでもらえたw
/全然(?!.*?(?:ない|なく|なかった|ません)).*?。/
これでどうだ
435:デフォルトの名無しさん
09/08/31 02:32:07
キュウリを突っ込んで欲しいのか?
魚肉ソーセージを突っ込んで欲しいのか?
436:デフォルトの名無しさん
09/09/01 10:08:55
全然((?!ない|なく|なかった|ません).)*。
437:デフォルトの名無しさん
09/09/01 21:27:07
>>434 >>436
検索してみたら「全然参考にならないんだ、悪いけど。」にマッチしてる。
438:デフォルトの名無しさん
09/09/01 22:13:55
>>437
Perl と Ruby で試してマッチしないんだけど、どんな正規表現エンジン使ってるの?
439:デフォルトの名無しさん
09/09/01 22:25:44
>>437
お前のレス全然参考にならないんだ、悪いけど。
440:デフォルトの名無しさん
09/09/01 22:30:23
>>438
これ。内部エンジンがどうなっているのかよく分かんない。
URLリンク(www.kotonoha.gr.jp)
441:デフォルトの名無しさん
09/09/01 23:00:44
>>427 = >>440 なのか?
>>1 をよく読んで出直せ。
442:441
09/09/01 23:09:11
まあいいや。 >>427 = >>440 と仮定して。
>>440 のをちょっと試してみたけど、
「前後文脈の指定について」の後文脈の例を見るとわかるように、
「検索文字列」の直後のパターンを指定したい場合は、
文字列先頭のアンカを指定する必要があるみたい。
例えば >>436 のを参考にこんなんでいけるかと。
^((?!ない|なく|なかった|ません).)*。
443:デフォルトの名無しさん
09/09/01 23:16:52
>>441
ごめんなさい。
>>442
おおお、できた。ありがとう。
444:デフォルトの名無しさん
09/09/04 13:45:50
お時間あればよろしくおねがいします
●正規表現の使用環境
.NET Framework 2.0
●検索か置換か?
置き換え
●説明
ランダムな文字列内に繰り返す言葉を1つにまとめたい
●対象データ
abcdddddde
こんにちちちちちちわ
!+++**!
●希望する結果
abcde
こんにちわ
!+*!
445:デフォルトの名無しさん
09/09/04 14:20:02
>>444
s/(.+?)\1+/$1/g
ドトネトだとこんな感じか
Regex re = new Regex( @"(.+?)\1+" );
Console.WriteLine( re.Replace( "abcdddddde", "$1" ) );
446:デフォルトの名無しさん
09/09/04 14:23:20
s/(.)\1+/$1/g
でもいいな
447:デフォルトの名無しさん
09/09/04 23:46:35
>>445
ありがとうございます、なるほど・・・
PHPだけで他の言語や正規表現はサッパリで、助かりました
448:デフォルトの名無しさん
09/09/04 23:55:59
Javaでもやれ
449:デフォルトの名無しさん
09/09/05 00:56:44
20行で書けるからな
450:デフォルトの名無しさん
09/09/05 09:38:25
PHPでも20行で書けるな
451:デフォルトの名無しさん
09/09/06 15:33:57
●正規表現の使用環境
PCRE7
●検索か置換か?
検索
●説明
HTMLマーク付けされていないURLを探したい
●対象データ
URLリンク(example1.com) <a href="URLリンク(example2.com)">URLリンク(example2.com) URLリンク(example3.com)
●希望する結果
URLリンク(example1.com)
URLリンク(example3.com)
452:デフォルトの名無しさん
09/09/12 19:55:22
「けちなマッチング」ってもっと他の言い方ないの?
453:デフォルトの名無しさん
09/09/12 20:54:51
けちなマッチング、という言い方は知らないのだけど、
非欲張りな繰り返しのこと? それとも逆に強欲な繰り返しのこと?
454:デフォルトの名無しさん
09/09/15 23:24:21
最短一致とかいろいろな言い方あるね
455:デフォルトの名無しさん
09/09/17 13:12:34
●正規表現の使用環境
VBScript
●検索か置換か?
置換
●説明
ソースコードの関数を置換したい
●対象データ
1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)
●希望する結果
1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)
とりあえず対になる()の特定方法が知りたいです・・
456:デフォルトの名無しさん
09/09/17 19:10:43
正規表現以前に、単語単位でFuncA->FuncCを置換したら済む話じゃね?
457:デフォルトの名無しさん
09/09/17 19:59:50
関数の仕様というか引数の順番も変更になってるっぽいからダメそう。
カッコのネストの深さを限定すればあるいは。
458:デフォルトの名無しさん
09/09/17 20:26:50
>>455
ネスト数を限定すれば書けるが汚くなるのは言うまでもない。
459:デフォルトの名無しさん
09/09/18 09:51:28
perlの正規表現の(?PARNO)みたいに再帰を書けるように
拡張されたのを使えばなんとかなるけどあれを正規表現と
呼んでいいのか激しく疑問w
さらに全く正規表現じゃなくなるが頭に
#define FuncA(x,y,z) FuncD(z,x,y)
を追加してcppに食わせれば一発なんだけどね。
% cat hoge
#define FuncA(x,y,z) FuncC(z,x,y)
1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)
% cpp hoge
# 1 "hoge"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hoge"
1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1,"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)
460:デフォルトの名無しさん
09/09/18 13:14:55
スルーされにくい質問のテンプレと例
●正規表現の使用環境
5.10.0
●検索か置換か?
置換
●説明
先頭の<と行末の>を削除したい
●対象データ
<XXXXXX>
XXXXXX>
<XXXXXX
●希望する結果
XXXXXX
461:デフォルトの名無しさん
09/09/18 13:16:46
スルー力を試されているのか?
462:デフォルトの名無しさん
09/09/18 13:24:16
>461
な、なぜだ…このテンプレつかてるのに。
あ。パールです…
463:デフォルトの名無しさん
09/09/18 13:31:32
> ●正規表現の使用環境
> 5.10.0
言いたいことはわからんでもないが。
464:デフォルトの名無しさん
09/09/18 13:34:45
>463
Linux 2.6.30.5-43.local.fc11.i686.PAE #1 SMP Wed Sep 16
16:46:32 JST 2009 i686 i686 i386 GNU/Linux
あら勘違いしたかな?これでだいじょぶですか?
465:デフォルトの名無しさん
09/09/18 13:39:08
>>460
しむらー、一行目
/^<?(.*?)>?$/
Perlでは実行確認してないけど多分大丈夫だろ
466:デフォルトの名無しさん
09/09/18 13:43:34
>465
うわーありがとう。
もーちょっとだったのに汗
助かりました。
467:455
09/09/18 14:49:49
簡単には出来なそうなんですね。わかりました。
対になる()や[]の一致書式の方はありますか?
これが出来れば結構いろいろ応用がききそうなんですが。
468:デフォルトの名無しさん
09/09/18 15:32:46
厳密な意味での正規表現では無理なことの代表的なものが、括弧の対応。
最近の拡張ではできるものもあるけど、やりかたがそれぞれなので、
一般的に説明できない。
つーかその例のようなのは>>459の言うようにcpp使うのが楽だな。
469:デフォルトの名無しさん
09/09/18 18:48:14
「正規」表現って言い方ってどうよ?
正規分布 normal distribution
正規表現 regular expression
470:デフォルトの名無しさん
09/09/18 19:22:31
別に?
混乱するからどうしてもと言うなら
統計学のnormalを「標準」とでも脳内変換しとけ
471:デフォルトの名無しさん
09/09/18 20:03:18
>>469
何が問題なの?
異なる言語で単語が一対一に写像するなんてことは有り得ないんで、
その程度の不整合でいちいち悩んでると人生辛くなるよ。
472:455
09/09/18 22:35:18
括弧処理には向いていないのでしたか。
それがわかっただけでも満足です。ありがとう。
473:デフォルトの名無しさん
09/09/18 23:05:45
>>181
これ読んでみたけど本当に良い本だった。世界的に認められてるだけのことはある。
数学丸出しなのでかなり難しい内容だけど、オライリーのフクロウ本を一通り読んで
DFAとNFAの違いを知りたいというモチベーションがあれば読み進められるかも。
474:デフォルトの名無しさん
09/09/18 23:16:09
/ヽ(´ー`)人(´∇`)人(`Д´)ノ/
475:デフォルトの名無しさん
09/09/20 20:12:29
カッコの対応を見つけるのって無理なのか・・・。意外だった。
476:デフォルトの名無しさん
09/09/24 21:36:59
C#の正規表現で悩んでいます。
お時間あればよろしくおねがいします
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
()の文字を取り除きたい
●対象データ
W(ジョーカー)
W(ルナ)
●希望する結果
W
W
string Title = "W(ジョーカー)";
string nobrackets = "<title>(.*)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;
で、nullなんです。アドバイス乞う…。
477:デフォルトの名無しさん
09/09/24 22:15:26
(1)あんまり弄らなかった方
string Title = "W(ジョーカー)";
string nobrackets = @"(?<title>W)\(.*\)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;
(2)ちょっと弄ってみた方
string Title = "W(ジョーカー)";
string nobrackets = @"\(.*\)";
Regex re = new Regex(nobrackets);
Title = re.Replace(Title, "");
>>476
何がしたいのかをもうちょっと良く考えてみるといい
478:デフォルトの名無しさん
09/09/24 22:15:26
本当に取り除くだけでいいのなら、こんな感じ?
Title = Regex.Replace(Title, @"\(.*?\)", "");
479:デフォルトの名無しさん
09/09/24 22:52:03
thanks!
480:デフォルトの名無しさん
09/09/25 11:17:01
C#の正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
ホームページのすべてのタグを取り除きたい
●対象データ
URLリンク(www.asahi.com)
●希望する結果
プレーンテキスト
●現状
');
document.write('');
//-->
などいくつかのタグが残る状況です。
●いま書いている正規表現
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
481:デフォルトの名無しさん
09/09/25 11:35:31
>>480
「いま書いている正規表現」の処理の前段で <script>...</script> を削除すると良いと思われ。
482:デフォルトの名無しさん
09/09/25 12:14:56
早速ありがとうございます。
html = Regex.Replace(html, "<script>.*</script>", "");
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
としてみましたが、状況に変化なしです。
483:デフォルトの名無しさん
09/09/25 12:56:40
えーと、前段の方は <script.*[^>]>.*?</script> みたいな感じで Multiline で。
484:デフォルトの名無しさん
09/09/25 13:02:57
>>480
何でそうなるかの原因を考えよう。
想定と違う動きをした箇所を比較してみるといい。
document.write('ipt>');
といった、JavaScript内で閉じタグを記述してる箇所に正規表現がひっかかって');が残る。
だから481は<script type= .... </script>を先に除去すればいい、って言ってるのでしょう。
485:デフォルトの名無しさん
09/09/25 13:44:24
> html = Regex.Replace(html, "<script>.*</script>", "");
なんでこっちだけRegex.Replaceなんだ?
たぶん、これでいいんじゃないかな
Regex regex1 = new Regex("<script>.*?</script>", RegexOptions.Singleline);
Regex regex2 = new Regex("<noscript>.*?</script>", RegexOptions.Singleline);
Regex regex3 = new Regex("<.*?>", RegexOptions.Singleline);
html = regex1.Replace(html,"");
html = regex2.Replace(html,"");
html = regex3.Replace(html,"");
486:デフォルトの名無しさん
09/09/25 18:34:41
みなさん、ありがとうございます。
>>485
これがいちばんいけそうです。
URLリンク(www.asahi.com)
をやってみたら、まだ下のほうにだいぶタグが残るのですが…。
>>484
考えながらやってみてはいるのですが、のこったタグの原因はほとんど判読不明…。
たとえば、
impAserver = "URLリンク(imp.asahi.com)";
が残るのですが…。
>>483
実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
487:484
09/09/25 19:22:18
>>486
ほんとに考えてるのかなあ……。
<script>だと<script type="text/.... って書いてあるのに引っかからないわけですよ。
var wc = new WebClient() { Encoding = Encoding.GetEncoding("EUC-JP") };
var html = wc.DownloadString("URLリンク(www.asahi.com) ");
var result = Regex.Replace(html, "<script.*?</script>", "",RegexOptions.Singleline);
result = Regex.Replace(result, "<.*?>", "", RegexOptions.Singleline);
Console.WriteLine(result);
488:デフォルトの名無しさん
09/09/26 02:10:55
考えてない、考えてない・・・
他人の書いたのをコピーしてるだけ。
489:483
09/09/26 02:30:20
>>486
> 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
率とかそんなんじゃなくてさあ、 HTML のソース見て考えてる?
もうめんどくせえなあ。
490:デフォルトの名無しさん
09/09/29 00:50:56
>>486
えーと、差分を見る方法を用意してる?
処理前と処理後を比較すれば、どこが除去されたのか
すぐ分かるはずなんだけど。
windiffとかWinMergeでも使え。
491:デフォルトの名無しさん
09/10/01 07:09:09
わかりました
492:デフォルトの名無しさん
09/10/01 07:11:38
HTMLのサニタイゼーションに正規表現を使うなと……
493:デフォルトの名無しさん
09/10/01 13:32:47
先頭の改行(LF)を削除するにはどうすればいいのでしょうか?
$text =~ s/^\n//s; では削除されませんでした。
494:493
09/10/01 13:38:11
あ、されてました。
2つ改行がありました。
2つの改行を削除するには、/^\n\n//では削除されませんでした。
495:493
09/10/01 13:42:36
あれ?
これは改行じゃないのかもしれない。
なんかあります。
$textの先頭に改行される何かがあります。
CRLF、CR、LFのいずれもないのに、改行される何かがあるんです。
496:デフォルトの名無しさん
09/10/01 13:46:00
BOMか?
497:493
09/10/01 13:56:53
>>496
BOMじゃないですが、UTF-8です。
498:デフォルトの名無しさん
09/10/01 14:02:12
コード16進で表示すると何が出る?
499:493
09/10/01 14:03:40
/^\n//をやった直後に/^.//で最初の得体も知れない改行を削除しますと、◆の中に?がある文字が2つ出ました。
しかも、次の文字が消滅しました。
500:493
09/10/01 14:06:35
>>498
16進数での開き方を調べます。
501:デフォルトの名無しさん
09/10/01 14:08:20
楽しそうだな。これを機会にコンピュータ上で文字はどのように
表現されているのか勉強するといいと思うよ。
502:493
09/10/01 14:16:26
バイナリエディタで開いてみました。
その不気味な改行の部分は、EF BB BF 0D 0A E3でした。
この正体は何なのでしょうか?
>>501
勉強がんばってみます。
503:493
09/10/01 14:23:57
EF BB BFってどうやらBOMですね。
何とかしてみます。
504:493
09/10/01 14:26:08
でも出力されたテキストをメモ帳で保存したからBOMが付いたのかも知れませんね。
よく分かりませんね。
505:493
09/10/01 14:39:43
すみません。
全てはポックンのミスでした。
改行コード消した後に、改行コード付加してました。
BOMとか関係ありませんでした。
BOMはメモ帳で開いたから付加されただけでした。
0D 0AはCRLFの改行コードでした。
本当にありがとうございました。
506:デフォルトの名無しさん
09/10/02 13:21:12
>>455
勉強がてら、ActivePerl 5.8.8で作ってみた。
色々調べて、いい勉強になった。
my $re1 = qr/(?:[^(),]+|"(?>(?:(?>[^"\\]+)|\\.)*)")*/;
our $re2 = qr/\w+\((?:(??{$re1}),?|(??{$::re2}))*\)/;
my @s = qw{
FuncA(1,2,3)
FuncA(1,FuncB(2,3),4)
FuncA(1,"string2,3",4)
FuncA(1,2,3):FuncD(1,2,3)
FuncA(1,FuncB(2,FuncC(3,"4),(5"),"\","),6)
};
for (@s) {
print "$_\n";
s/FuncA\(($re1|$re2),($re1|$re2),($re1|$re2)\)/FuncC($3,$1,$2)/;
print "$_\n\n";
}
507:デフォルトの名無しさん
09/10/11 23:48:11
VB.NETの正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
2行以上の連続した空の行(全角、半角スペースのみの行、または改行のみの行)を2行にしたい。
(1行の空の行は1行のまま、2行の空の行は2行のまま)
●対象データ
AAA
BBB
CCC
●希望する結果
AAA
BBB
CCC
●現状
●いま書いている正規表現
Dim r As Regex = New Regex("<.*?>", RegexOptions.Multiline)
よろしくお願いします。
508:デフォルトの名無しさん
09/10/12 02:31:35
その「いま書いている正規表現」ってのは何を思って書いたの
509:デフォルトの名無しさん
09/10/12 12:20:24
<.*?>
・・・これは・・・。
510:デフォルトの名無しさん
09/10/12 12:28:14
"3行以上"の"空白行"を最長一致させて、それを2行の空白行に置換すれば良いんじゃない?
今確認出来る環境じゃないんで、適当に書くけども。
([ ]*/n){3} → /n/n に置換。
こんなイメージでどう?スペース入ってるけど、投稿すると消えるとおもう。
511:デフォルトの名無しさん
09/10/12 14:32:25
\n\n\n\nが\n\n\nにならないか?つーかスラッシュ?
((\s| )*\n){2,}
512:デフォルトの名無しさん
09/10/12 14:51:11
4から3にはならん
半分になるだろ
513:デフォルトの名無しさん
09/10/12 15:01:20
え、globalフラグなくてwhlieループとかなの?
514:デフォルトの名無しさん
09/10/12 16:55:11
{3,} なら3以上になるか。
515:デフォルトの名無しさん
09/10/12 22:03:19
レスありがとうございます。
([ ]*\n){3,}
((\s| )*\n){3,}
これで出来そうですね。/は自分の環境の場合\に直します。
[ ]と( )の違いも試してみます。
ありがとうございました。
516:デフォルトの名無しさん
09/10/14 00:43:45
とんちんかんなのかも知れんが、質問させてくださいな。
.NETの正規表現で"abc"という文字列を一回のreplaseで"b"にする方法はありますか?
517:デフォルトの名無しさん
09/10/14 01:28:02
>>516
>>4
つーか例は数個出してくれ
一個だけだと「/abc/を"b"に置換すればいい」とか言われても文句言えないぞ
518:デフォルトの名無しさん
09/10/14 01:37:17
途中から丁寧語になるレスを最近よく見かけるんだが、
流行っているのでしょうか?
519:デフォルトの名無しさん
09/10/14 02:02:46
随分語弊があった。すまんね。
環境:
.NET
目的:
置換
説明:
特定の連続しない2つの文字列を取り除く
対象データ:
ACB
ADCB
AECDB
結果:
C
DC
ECD
520:デフォルトの名無しさん
09/10/14 02:29:11
説明と例がちぐはぐな件
例に倣って、文頭と文末を一文字ずつ省けばいいのか?
それとも説明に則るとして、特定の文字列がAとBならACBCBはどうなるんだ?
521:デフォルトの名無しさん
09/10/14 03:17:30
>>519
AとBをそれぞれ取り除くだけじゃん。
正規表現の必要な話か?
522:デフォルトの名無しさん
09/10/14 13:02:14
[0-9]?[0-9]:[0-9][0-9]J(am|pm)
詳説正規表現の3版を読んでいるのですが
時刻にマッチさせる表現の例として、上のような正規表現が
書かれています。
このJというは、なんですか?誤植かと思って、ネットで正誤表を見てみましたが
誤植ではないみたいです。Jでやると、時刻にマッチしません。やっぱり誤植ですか?
何か意味があるのでしょうか?
523:デフォルトの名無しさん
09/10/14 14:12:48
誤植だと思う。
オライリーにメールすれ。
524:デフォルトの名無しさん
09/10/14 14:43:05
3版の正誤表ってどこにあるの?
525:デフォルトの名無しさん
09/10/14 14:47:48
どもです。
2版の正誤表で確認しました。3版の正誤表はないっぽいですね。
526:デフォルトの名無しさん
09/10/14 14:49:05
ズコー
527:デフォルトの名無しさん
09/10/14 14:58:21
グーグルブックスで、第2版が閲覧出来ました。
問題の箇所を見てみますと、「J」は書かれていないです。
P20の四角でかこわれた解答の部分で
手元の3版では、+SIZEJ*=と書かれています。
>>522で質問した正規表現はP25にかかれていますが
グーグルブックスでは閲覧出来ないページとなっています。
ありがとうございました。
528:デフォルトの名無しさん
09/10/14 19:25:53
初版は
「[0-9]?[0-9]:[0-9][0-9]●(am|pm)」
こんな表現。
●は、60%網点の丸。
529:デフォルトの名無しさん
09/10/14 21:11:01
「●は、60%網点の丸」は、確かふくろう本では空白を見やすくするための記法でしたね。
530:デフォルトの名無しさん
09/10/23 10:12:47
正規表現をつかって
ある原稿の
文末から10文字を抽出しろ。と課題がでたのですが
どうしたらできるでのしょうか
531:デフォルトの名無しさん
09/10/23 10:20:36
課題なら自分で考えろよ
532:デフォルトの名無しさん
09/10/23 10:21:54
文末に密着した任意の文字10個の正規表現でマッチさせればできるだろ
宿題は自分でやれ
533:デフォルトの名無しさん
09/10/23 10:26:17
文末が文章の終わりなのか、文の終わりなのか分からないが……
.{10}$
534:デフォルトの名無しさん
09/10/23 11:01:52
ワードの文章の文末表現を10文字程度抽出して分類せよ、という問題でした。
申し訳ないのですが本当によくわからないので、
検索する文字列、置換後文字列それぞれにどう入力したらいいのか教えてくれませんか。
535:デフォルトの名無しさん
09/10/23 11:22:26
ワードwww
あれ正規表現じゃなかったような
ヘルプ見るかぐぐれ、それでもわからないならあきらめろマジで
536:デフォルトの名無しさん
09/10/23 11:35:34
いやだからさ
課題ってのは自分で考えてやらないと意味ないでしょ?
ここで答え教えて貰ってそれ提出すればそれでいいと思ってるの?
537:デフォルトの名無しさん
09/10/23 12:02:34
「オプション」「ワイルドカードを使用する」
「??????????。」
538:デフォルトの名無しさん
09/10/23 12:05:07
>>537
>>536みたいな文章の文末が判定できませんやりなおし
539:デフォルトの名無しさん
09/10/23 12:14:36
??????????[。??]
540:デフォルトの名無しさん
09/10/23 12:38:32
ワードの文章、抽出して分類…ワードのスレで聞いたら?
541:デフォルトの名無しさん
09/10/23 12:50:48
甘やかすな
課題は自分で考えさせるべきだ
542:デフォルトの名無しさん
09/10/23 13:23:10
抽出するなら、VBAの知識が必要かもな
543:デフォルトの名無しさん
09/10/24 08:54:18
VBSのregexpを呼び出して使う感じかなぁ。
544:デフォルトの名無しさん
09/10/26 11:37:03
特定の1文字をグループで取り出し、その1文字を後方参照で否定で使いたいのですが、
うまくいきません。つまり[^\1]がうまく動作しません(構文エラーにはならないのですが)。
おそらく\1は1文字でなく文字列なので文字クラスの中で使えないのだと思いますが、
では\1を否定で使うにはどうしたらいいですか。(!\1)なんてありませんよね。
545:デフォルトの名無しさん
09/10/26 12:48:08
>>544
>>1
まず処理系を明示しろ
546:デフォルトの名無しさん
09/10/26 12:48:50
ものによるけど否定先読みでどうにかならん?
547:デフォルトの名無しさん
09/10/26 13:00:29
perlなら
/(.)(?!\1)./
でいけたよ。
548:デフォルトの名無しさん
09/10/27 00:09:38
●正規表現の使用環境
VB.NET
●検索か置換か?
検索
●説明
htmlタグの外にある文字を取得したい
●対象データ
<hoge hoge hoge hoge>
<hoge>
<hoge>
<hoge hoge hoge>
あいうえお
<hoge hoge>
<hoge hoge hoge hoge hoge>
●希望する結果
あいうえお
対象のデータの中にはタグの外の文字列は1箇所(1行)しかありません。
何行目にあるかは不明です。
お願い致します。
549:デフォルトの名無しさん
09/10/27 01:24:47
>>548
説明からするとサンプルのようにきれいに揃っていそうだし
"<"で始まらない行を抽出(もしくは始まる行を削除)で十分かもしれない
VB.netは知らないから具体例はパス
550:544
09/10/27 02:03:55
すみません。処理系はC#です。
否定先読みという機能を勉強したところ、C#の正規表現にも先読みは
あったので、これで実現することができました。ご教授有難うございました
551:デフォルトの名無しさん
09/11/01 11:23:38
javascript
抽出
1回では難しそうなので2回に分けてやっているのですが
str=str.match(処理1)
str=str.match(処理2)
とやるとうまくいきません
下がないと処理1はできます
このやり方では何か問題があるのでしょうか?
552:551
09/11/01 15:39:34
一応自己解決しました
過去のスクリプトを見直していたところ
matchで検索してからsubstringで抜き出していて
試したところうまくいきました
どうも失礼しました
553:デフォルトの名無しさん
09/11/03 13:13:35
おめでとう
554:デフォルトの名無しさん
09/11/06 01:43:16
●正規表現の使用環境
秀丸
●検索か置換か?
置換
●説明
文字列Higを含むが、Highでない文字列を置換
●対象データ
Hig123
HigABC
HighScore
●希望する結果
Hig123
^^^
HigABC
^^^
HighScore
お願いします。
555:デフォルトの名無しさん
09/11/06 01:52:43
マッチ部分はHigだけでいいの?
Hig(?!h)
556:デフォルトの名無しさん
09/11/06 02:09:08
できました、ありがとうございます。
理解できないところがあるので、迷惑でなければ教えてください。
?の効果は、直前のパターンが0回または1回です。
しかし、直前の文字は記号なのでエラーになるように見えます。
現に*や+ではエラーになります。
?はどんな動作をしているのでしょうか?
557:デフォルトの名無しさん
09/11/06 02:22:40
>>555のこと?
(?!pettern)は否定先読みという構文で、その?とは異なる意味
558:デフォルトの名無しさん
09/11/06 02:27:13
555のこと言ってるんなら?じゃなくて
(?!expression) 後方不一致指定でしょ
559:デフォルトの名無しさん
09/11/06 02:29:26
理解できました。
ありがとうございます。
560:デフォルトの名無しさん
09/11/08 23:04:00
PHP5で文字コードはEUCです。
全角半角が混ざった文字列の中から、@******という部分を取り出したいと思っています。
・@の前にはどんな文字があってもいい
・******は半角英数とアンダーバー(_)が使える
・******の後ろにスペースか全角文字かアットマーク(@)が付いたら終わり
という条件で取り出したいのですが、うまくいきません。
@\w+[^ ][\x01-\x7E]
では無理でした。
どのような式を書けばいいのでしょうか?
561:560
09/11/08 23:10:48
具体的には、
こんにちは@Abc_123@Def_456 今日はいい天気
を、
こんにちは[hoge][hoge]今日はいい天気
に置換したいって事です
562:デフォルトの名無しさん
09/11/09 01:21:51
>>560
@[_\w]+
でいいんじゃない?
563:デフォルトの名無しさん
09/11/09 02:50:08
>>562
\w には _ も含まれてるとおも。
564:560
09/11/09 17:24:29
>>562
>>563
ありがとうございます。@[\w]+で出来ました。
まだまだ正規表現は初心者ですが、流石にこれが出来ないのは情けない・・・・・・・
565:デフォルトの名無しさん
09/11/09 17:26:42
@\w+
でおk
566:デフォルトの名無しさん
09/11/11 23:08:14
●正規表現の使用環境
VB.NET
●検索か置換か?
検索
●説明
拡張子をtxt,jpg,gifなど複数の種類を指定してURLを検索したい
●対象データ
http:****/****/****/12345.jpg
http:****/****/****/12345.exe
http:****/****/****/12345.gif
http:****/****/****/12345.txt
http:****/****/****/12345.bmp
●希望する結果
http:****/****/****/12345.jpg
http:****/****/****/12345.gif
http:****/****/****/12345.txt
現在
URLリンク([\w\d)()~_.=+-]+\.jpg
jpgの場合は上記のように書いてありますが、別の拡張子を追加していくにはどうやって書けばよいでしょうか?
URLリンク([\w\d)()~_.=+-]+\.jpg|gif
だと、
http:****/****/****/12345.jpg と
g
にヒットするのですが、[jpg|gif] [(jpg)|(gif)]やURLの部分をカッコで囲んだりしてみましたがだめみたいです。
URLリンク([\w\d)()~_.=+-]+\.jpg|URLリンク([\w\d)()~_.=+-]+\.gif ・・・・・・・
と書けば良いのですが、長くなってしまいます。
拡張子だけを書き足す方法があれば教えていただけないでしょうか。
567:デフォルトの名無しさん
09/11/11 23:17:11
\.(jpg|gif)
568:デフォルトの名無しさん
09/11/11 23:24:08
できましたー
ありがとう。
でもこれ試した気がしたんだが・・・
569:デフォルトの名無しさん
09/11/12 07:24:52
性器表現
570:デフォルトの名無しさん
09/11/12 22:18:10
$hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?/$1/i;
print $hoge;
とにかく16進ぽい文字列を16文字で切り出したいので
上みたいに書いたんだけど、切り出せません。
どこが間違ってるかわからないので助けて
571:デフォルトの名無しさん
09/11/12 22:42:35
$hoge = "0123456789ABCDEF012";
$hoge =~ /([[:xdigit:]]{16})/;
print $1, "\n";
572:デフォルトの名無しさん
09/11/12 22:43:43
$hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?//i;
print $hoge;
print $1;
としてみりゃ原因わかるんじゃね?
?外して文頭文末明示すればおk
573:デフォルトの名無しさん
09/11/14 17:16:59
「秀丸エディタ」の正規表現の置換がうまくいきません。
作業内容は、
(1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、
(2)「秀丸エディタ」でそのテキストデータを開き、
^(先頭文字)⇒¥t¥t¥t
に全置換しようとしました。
もともとテキストデータであったファイルを置換するときはうまくいきますが、
Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。
どうすれば、先頭行を置換できるでしょうか。
よろしくお願いいたします。
574:デフォルトの名無しさん
09/11/15 01:24:50
先頭文字なのか
先頭行なのか
どっちかハッキリしろ
575:デフォルトの名無しさん
09/11/15 10:10:28
>>574
先頭文字です。
Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
576:デフォルトの名無しさん
09/11/15 11:33:20
マルチラインの問題とみた。
マルチライン有効になってる?
577:デフォルトの名無しさん
09/11/16 00:48:19
>>576
ありがとうございます。
マルチラインの設定は秀丸側の設定ですか?
それともExcelでしょうか?
初心者ですみません。
早く秀丸を使いこなさないと、ソース書くときに便利なのにもったいないですね。
578:デフォルトの名無しさん
09/11/16 12:20:02
>>577
そんなのどんな初心者でも人間なんだから
「マルチライン 秀丸」と「マルチライン Excel」で検索かけたり、設定見れば大体予想は付くと思うが、
少しは自分の手、動かした方がいいぞ、反感買うから
579:デフォルトの名無しさん
09/11/16 12:27:26
パソコン買ったら最初に覚えること。
それは
検索
だ!
580:デフォルトの名無しさん
09/11/16 12:28:49
まさか、「□正規表現(R)」 をチェックしてないとかいうオチじゃないだろうな
581:デフォルトの名無しさん
09/11/19 07:06:23
>>577です。
皆さんありがとうございます。
マルチライン、秀丸、excel、テキストなどで検索したのですが、
どこでマルチラインの有効無効をセットできるのか分かりません。
エクセルの各々のセルは、セル内改行を認めていません。
教えていただけないでしょうか。
よろしくお願いいたします。
582:デフォルトの名無しさん
09/11/19 07:43:49
>>575
> Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
>>580は?
583:デフォルトの名無しさん
09/11/19 07:45:52
念のために書いておくと
置換の時に出てくるダイアログに>>580のチェックボックスがある
584:デフォルトの名無しさん
09/11/19 09:31:15
任意の1文字(なくてもOK)ってのはどうやるの?
「.*」だと文字数制限ないし...
585:デフォルトの名無しさん
09/11/19 09:43:31
一般的には(|.)かな。perl互換なら.?
586:デフォルトの名無しさん
09/11/19 09:47:17
.+
587:デフォルトの名無しさん
09/11/19 10:06:15
改行と空白(全角&半角)以外すべての文字って一気には表現できない?
588:デフォルトの名無しさん
09/11/19 10:42:56
[^\n\s]+
改行またはホワイトスペース(半角スペースとTAB含む)以外の1文字
(改行もホワイトスペースだから複数行対象のときは\n不要かもね)
[^\n\s ]+
全角スペースは文字コードにもよると思うので処理系依存かな
589:デフォルトの名無しさん
09/11/19 18:44:49
>>584
.?
590:デフォルトの名無しさん
09/11/20 01:22:54
>>587
なんで >>1 を読まないかな?
591:デフォルトの名無しさん
09/11/21 08:57:37
>>583
そこはチェックを入れています。
別のcsvで試したら、1行目のタイトル行だけ先頭行を認識し、2行目からのデータ行の先頭行は認識しませんでした
(T_T)。
592:デフォルトの名無しさん
09/11/21 09:31:53
だから、マルチラインがtrueになってないんだろ。
593:デフォルトの名無しさん
09/11/21 09:37:18
どうもやりたいことがよくわからんな
594:デフォルトの名無しさん
09/11/21 09:55:04
困ってるという割にのんびりしてるな
そういう独自の用語じゃなくて
どういうデータをどうしたいのか具体的に書いて
秀丸スレでもう一度聞いたほうがマシな気がする
595:デフォルトの名無しさん
09/11/21 10:51:27
マルチラインが無効になってりゃ、改行記号が無視されるんだから、
先頭以外の改行は改行とみなされないんだよ。
だから2行目以降の先頭は、先頭とみなされていない。
改行記号に続く文字列って事。
改行記号を改行記号として認識させるのがマルチライン。
マルチライン問題じゃなかったらお手上げ。
596:デフォルトの名無しさん
09/11/21 11:08:48
せめて >4のテンプレ埋めるくらいはしてくれんと。
Excel、秀丸共に現役バージョンが混在してるソフトなんだし
環境晒しもせず、できませんできません言われてもどうしようもない
WinXPSP3 / Excel 2002(Office XP) SP3 / 秀丸8β25 (HMJRE V2.06)
とりあえず↑の環境では
・Excelコピー→秀丸へペースト
・名前を付けて保存:テキスト(タブ区切り)→秀丸で開く
のどちらでも問題なくできたよ。
597:デフォルトの名無しさん
09/11/21 12:28:52
マルチライン、マルチラインって言ってるヤツ、バカじゃねぇの?
598:デフォルトの名無しさん
09/11/21 14:49:56
●正規表現の使用環境
Java1.6
●検索か置換か?
検索
●説明
雑多な文字列からスラッシュで終わるURLを抽出したい
●対象データ
今日はURLリンク(abcd.efgh)でご飯を食べました
そしたらURLリンク(12345)なスープが出てきてビックリ
おまけにURLリンク(aiueo)こんなデザートまで
●希望する結果
URLリンク(abcd.efgh)
599:598
09/11/21 15:27:20
●パターン
(URLリンク(|https:)){1}[\w\_\.\-/:\#\?\=\&\;\%\~\+]+/[^A-Za-z0-9\_\.\-/:\#\?\=\&\;\%\~]
●結果
URLリンク(abcd.efgh)で
最後に一文字付いてしまいます
どうやって付かないようにすれば良いでしょうか
600:デフォルトの名無しさん
09/11/21 17:14:20
否定の先読み使え
601:デフォルトの名無しさん
09/11/24 03:17:06
2 文字目以降にマッチする正規表現はどのように記述したら良いですか?
例えば "abcXdXefgXXhij" という文字列の、2番目以降全ての "X" にマッチするようなものです。
基本的そうなのですが、ちっとも思いつきませんでした。
602:デフォルトの名無しさん
09/11/24 09:13:58
2文字目以降ってのが何を指してるのかわからんな。
その例だとどれにマッチすればいいんだ?
603:601
09/11/24 09:43:31
>>602
すいません、いろいろ書き忘れてました。
こんな感じです。
- 使用環境: AutoHotkey 1.0.48
- 使用法: 検索
- 説明: 下記にある文字 X を、最初だけ残して残りを Y に置換したい
"abcXdXefgXXhij" -> "abcXdYefgYYhij"
604:デフォルトの名無しさん
09/11/24 09:55:19
AutoHotKeyならRegExReplaceで開始位置を指定できるので、
最初のXの次の文字からにすりゃいいんじゃねーの?
605:601
09/11/24 10:14:23
>>604
そうでした、ありがとうございます。
こんな感じでできました。
RegExReplace(str, "X", "Y", temp, -1, InStr(str, "X") + 1)
606:デフォルトの名無しさん
09/11/24 19:44:10
IPv6かどうかを調べる正規表現ってどこかにサンプルある?
607:デフォルトの名無しさん
09/11/24 21:06:46
IPv6 regex でググってみるとか
608:デフォルトの名無しさん
09/11/26 00:47:05
IPv6 アドレスの形式チェックを正規表現でやる香具師は池沼。
getaddrinfo(3) を使え。
ってうちのじっちゃんが言ってた。
609:デフォルトの名無しさん
09/11/26 08:59:16
>>608
inet_ptonだろ
610:606
09/11/26 09:39:14
>>608
JavaScriptとか使って入力段階で一旦弾きたいんですだよ。
サーバ側ではinet_ptonなりなんなり別の手段で再チェックするけど。
611:デフォルトの名無しさん
09/11/26 09:47:28
>>610
はやくぐぐれよ
URLリンク(www.google.co.jp)
612:デフォルトの名無しさん
09/11/26 10:42:06
>>608
いのなかのかわず
613:デフォルトの名無しさん
09/11/26 13:47:57
鬼車でひいひい言わせてやるよ
614:デフォルトの名無しさん
09/11/26 23:51:33
>>609
inet_pton(3) のことは綺麗さっぱり忘れろ。
ってうちの itojun が言ってた。
615:デフォルトの名無しさん
09/11/27 11:50:16
●正規表現の使用環境
perl5
●検索か置換か?
検索
●説明
クォーテーションに囲まれた(省略可)の文字列を取得したい。
●対象データ
"aaa":'bbb':`ccc`:ddd:eee:666:777:888:999:000:111
●希望する結果
$1:aaa
$2:bbb
$3:ccc
$4:ddd
$5:eee
$6:666
$7:777
$8:888
$9:999
$10:000
$11:111
(["'`]*)([^\1]*)\1):(["'`]*)([^\2]*)\2):(["'`]*)([^\2]*)\2)の形式で、
後方参照が一桁の時はうまく行くんですが、二桁になると不具合がおきます。
(["'`]*)([^\10]*)\10)
\10の下一桁に該当する文字(0)があるとマッチしません。
原因は[^\10]の部分が「\10以外」ではなく「\1と0以外」と解釈される為では
ないかと思いますが、回避する記述方法はありますか?。
616:デフォルトの名無しさん
09/11/27 12:02:52
失礼しました。
(["'`]?)([^\1]*)\1:(["'`]?)([^\3]*)\3:(["'`]?)([^\5]*)\5
(["'`]?)([^\11]*)\11)
$2:aaa
$4:bbb
$6:ccc
$8:ddd
$10:eee
$12:666
$14:777
$16:888
$18:999
$20:000
$22:111
でしたm(__)m。
617:デフォルトの名無しさん
09/11/27 13:26:38
そもそも文字クラス中で\1とかは使えない罠。
[^\1]は文字コードが1の文字以外に解釈されて
いると思われる。
print "match1\n" if 'aa' =~ /(.)[^\1]/;
print "match2\n" if "a\001" =~ /(.)[^\1]/;
print "match3\n" if 'ab' =~ /(.)[^\1]/;
618:デフォルトの名無しさん
09/11/27 13:49:45
1と3だけマッチしますね。「(後方参照としての)\1と0以外」と
解釈される為でも無いということですね。
確かに下一桁が該当する場合に必ず一致しないということでも
なかったので、原因がわからず苦しんでました。ありがとうございます。
^を使用して簡潔に「(二桁で指定する)後方参照の文字を含まない
文字列」は表現できないものでしょうか。
619:デフォルトの名無しさん
09/11/27 14:47:01
クラスの中で使えないということは^で「以外」を
表現することも出来ないということですね…。
perl5なんで(?!regexp) が使えるのかな。