[過去ログ] bbs.cgi再開発プロジェクト6 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
480(3): 476 2005/06/08(水)15:50 ID:DTGWGuO70(2/3) AAS
> Shift_JIS部分だけquotemetaするコードくらいなら書きますよ。
とか言うほどの事じゃなかった。むしろテストの方が大変だった。
必要な作業だったのかどうか謎だけど一応上げておきます。
perl5.00503でテスト。
(票表十){2}
とか問題ありそうなShift_JIS + 正規表現交じりでやってみたけどOKでした。
foreach my $NG_word_ref (@FOX_Ro54){
my $NG_word = $NG_word_ref->[0]; # エスケープしたままじゃ他で使えないのでコピー
next unless $NG_word; # 空文字列ならスキップ
$NG_word =~ s/((?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])+)/quotemeta($1)/geo;
省12
482: 動け動けウゴウゴ2ちゃんねる 2005/06/08(水)19:06 ID:DTGWGuO70(3/3) AAS
>>481
その文字列でチェックしてみたんですが、
5.00503ではエラー起きませんね。省略部分に何かあるんではないでしょうか?
> (\.|.|/|/)(3|3|4|4|6|6|8|8|9|9
これの8ビット目が立ってるバイトを「#」に置き換えると↓こんな感じです。
(.|#D|/|#^)(3|#R|4|#S|6|#U|8|#W|9|#X
「^」は一応メタキャラですが文頭にないので素通りのようです。最後、括弧が閉じてないので
勝手に閉じ括弧付けて実験しました。
省3
483(2): 476 2005/06/09(木)12:03 ID:NnR04xax0(1/2) AAS
evalってコスト高いんじゃ……?と思ったのでベンチ取ってみた。
@FOX_Ro54が2048個のチェックを1000回。
Benchmark: timing 1000 iterations of with_eval, with_noeval...
with_eval: 159 wallclock secs (158.80 usr + 0.02 sys = 158.82 CPU) @ 6.30/s (n=1000)
with_noeval: 155 wallclock secs (154.28 usr + 0.05 sys = 154.33 CPU) @ 6.48/s (n=1000)
誤差の範囲内なので、運用上の安全を考えると現状維持で良いと思った。>>480のコードのベンチも取ってみた。
ついでにJcode.pmで双方ともEUCに変換した時の結果も。
Benchmark: timing 1000 iterations of with_jcode, with_noreg, with_reg...
with_jcode: 493 wallclock secs (490.95 usr + 0.07 sys = 491.02 CPU) @ 2.04/s (n=1000)
with_noreg: 124 wallclock secs (123.99 usr + 0.04 sys = 124.03 CPU) @ 8.06/s (n=1000)
省4
492: 476 2005/06/10(金)11:20 ID:C8+6ZCy40(2/3) AAS
>>484
ご愁傷さまです。早い復活を祈ってます。
>>480
あと若干ソースを変更。空文字チェックは直前の方がより安全ってのと、evalの結果の代入は
必要ないかと。
foreach my $NG_word_ref (@FOX_Ro54){
my $NG_word = $NG_word_ref->[0]; # エスケープしたままじゃ他で使えないのでコピー
$NG_word =~ s/((?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])+)/quotemeta($1)/geo;
next unless $NG_word; # 空文字列ならスキップ
eval{$main::In_Strings =~ /$NG_word/} and return $NG_word_ref; # 合致したらリファレンスを返す。
省2
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.197s*