いつまで続くのか、何を書くのか、それもまた流れのままに 頭の中にまとまらないものがあるから そんなのがふと出た時に書いていく
僕のネット帳
スポンサーサイト
-----------  CATEGORY: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ページトップへ
PHP 特定範囲内の文字列検査
2008-01-16-Wed  CATEGORY: php
重複チェックしたくて特定文字列間を走査するようにしてみた。
例えば、新たにリンクを追加するときに重複がないかとか。。。
次のようなテキストファイルがあったとしよう。
ファイル名:rink.txt

中身
宮本、心理テスト英語で300問
日本サッカー最高峰の頭脳を持つ宮本に、世界最先端の技術が用いられた。
クラブのスポンサー「レッドブル」はF1チームなどにも出資。
選手の肉体データを測定、管理しており、宮本も10日にメディカルチェックを受けた。
医療検査以外に心理テストまで初体験。
反射能力や集中力テストも受け、頭脳派らしく高得点をマークしたという。

<?php

//*特定範囲内の文字列検査

//***検査対象ファイルのアドレス
$save_file = "rink.txt";

//***検査範囲(特定文字列間を検査)
$search_top = "最高峰の頭脳";
$search_end = "初体験";

//***検査文字列
$find = array("300問","レッドブル","心理テスト","高得点");

//****以下実行
kensa($save_file,$search_top,$search_end,$find);

//***特定範囲内の文字列検査用関数
//***$a:検査対象ファイル,$b:検査範囲開始文字列,$c:検査範囲ラスト文字列,$d:検査文字列(配列で複数指定)
//***$aの中の$bから$cまでの間に$dの文字列があるかを調べる。
function kensa($a,$b,$c,$d) {

$kensa_file = @file_get_contents($a);

$num_top = strpos($kensa_file,$b);
$num_end = strpos($kensa_file,$c);

$get = substr($kensa_file,$num_top,$num_end - $num_top);

echo $get;

$count = count($d);

for ($i=0; $i < $count; $i++) {
if (ereg($d[$i],$get) == true) {
echo "重複のヨカン-->".$d[$i];
echo '<br />';
}
}
}
?>

上記の例だと「最高峰の頭脳」から「初体験」までを走査する。
よって、
重複のヨカン-->レッドブル
重複のヨカン-->心理テスト

が結果として出る。
ちなみにテキストファイルの文字コードはutf-8じゃないとエラーがでるはず。
違う文字コードの場合は変換しないとダメかな多分。
あと、常に決まっているタグ内の重複検査の為に作ったので、通常テキストで検査するには色々加えないとダメです念のため。
スポンサーサイト
ページトップへ  トラックバック0 コメント0
php 文字列の任意の範囲を指定した自然順の配列ソート
2008-01-14-Mon  CATEGORY: php
ということで、前回のソート作った後にちょっと問題発生したので再度別のを作った。
今回のは、一定の部分抜き出して自然順で並べる。
つまり、natsort()のように自然順で並べるんだけれども、
それを一部分だけを見てやりたいなっていう話。
※前回のは数字部分だけしかみていないのでちと違った。
で、今回のはこんな感じ。
<?php

//***比較用関数
function cmp($a,$b){

//***任意の文字列を取得する
//***ここではhttp以下全てを取っている。
//***範囲決めたいなら、strposとかで出現場所を調べて希望範囲を決めてやればいけるはず。

$match_a = strstr($a,"http");
$match_b = strstr($b,"http");

//***自然順に比較して次を返す
//***① $match_a == $match_a の時 : 0
//***② $match_a < $match_a の時 : 負の値
//***③ $match_a > $match_a の時 : 正の値
return strnatcmp($match_a,$match_b);


}

$aaa = array("おかん11歳http:test_101.html",
"かまぼこ111円http:test_22.html",
"あいどるぷらいすれすhttp:test_25.html",
"うめぼしすっぱいhttp:arigatou_11.html",
"たたかう料理人http:arigatou_19.html",
"Macグリル166円http:arigatou_8.html",
"ジョージ77歳http:doumo_25.html",
"おとん55歳http:doumo_15.html",
"Long17ヤードhttp:arigatou_12.html",
"ジュリアン最高http:test_2.html"
);

print_r($aaa);

natsort($aaa);
//***関数使った配列ソート
usort($aaa,"cmp");

echo '<br />';
print_r($aaa);


?>

結果。
配列①:おかん11歳http:test_101.html
配列②:かまぼこ111円http:test_22.html
配列③:あいどるぷらいすれすhttp:test_25.html
配列④:うめぼしすっぱいhttp:arigatou_11.html
配列⑤:たたかう料理人http:arigatou_19.html
配列⑥:Macグリル166円http:arigatou_8.html
配列⑦:ジョージ77歳http:doumo_25.html
配列⑧:おとん55歳http:doumo_15.html
配列⑨:Long17ヤードhttp:arigatou_12.html
配列⑩:ジュリアン最高http:test_2.html



配列①:Macグリル166円http:arigatou_8.html
配列②:うめぼしすっぱいhttp:arigatou_11.html
配列③:Long17ヤードhttp:arigatou_12.html
配列④:たたかう料理人http:arigatou_19.html
配列⑤:おとん55歳http:doumo_15.html
配列⑥:ジョージ77歳http:doumo_25.html
配列⑦:ジュリアン最高http:test_2.html
配列⑧:かまぼこ111円http:test_22.html
配列⑨:あいどるぷらいすれすhttp:test_25.html
配列⑩:おかん11歳http:test_101.html
となりました。
めでたしめでたし。

ここでのキモはhttp以下の文字、arigatouならarigatouで固まって、かつ、数字順になっていることです。
ページトップへ  トラックバック0 コメント0
PHP配列:任意の文字列で並べ替えを行いたい
2008-01-14-Mon  CATEGORY: php
ということで、普通に配列の並べ替えをやるのではなくて希望の場所を比較したい。
例えば、
配列1:おかん11歳test_101.html
配列2:かまぼこ111円test_22.html
配列3:あいどるプライスレスtest_3570.html
配列4:うめぼしすっぱい_test_1248.html

というのがあったとしよう。
これの.htmlの前の数字で並べ換えを行いたい。
ということで作ってみた。

<?php

/*_と.html間の数字を比較して小さい順に並べる*/

//***比較用関数
function cmp($a,$b){

//***任意の文字列を取得する
//***ここでは_&数字の連続&.htmlの部分を取得
//***例えばaaa_999.htmlなら_999.htmlの部分
ereg('_[0-9]+\.html',$a,$match_url_a);
ereg('_[0-9]+\.html',$b,$match_url_b);

//***取得した部分から数字の連続のみ抜き出し->>999とか
ereg('[0-9]+',$match_url_a[0],$match_a);
ereg('[0-9]+',$match_url_b[0],$match_b);

//***数字の大小を比較
if($a == $b) {
return 0;
} else if($match_a > $match_b) {
return 1;
} else {
return -1;
}
}

$aaa = array("おかん11歳test_101.html",
"かまぼこ111円test_22.html",
"あいどるプライスレスtest_3570.html",
"うめぼしすっぱい_test_1248.html");

print_r($aaa);

//***関数使った配列ソート
usort($aaa,"cmp");

echo '<br />';
print_r($aaa);

?>

表示結果は、
配列1:おかん11歳test_101.html
配列2:かまぼこ111円test_22.html
配列3:あいどるプライスレスtest_3570.html
配列4:うめぼしすっぱい_test_1248.html

であったのが

配列1:かまぼこ111円test_22.html
配列2:おかん11歳test_101.html
配列3:うめぼしすっぱい_test_1248.html
配列4:あいどるプライスレスtest_3570.html

となる。

ちなみに[0-9]+は数字の繰り返し。
マッチングには以下のようなのができる。
$rcd = ereg("abc", $var); abc にマッチ
$rcd = ereg("a.c", $var); a?c にマッチ
$rcd = ereg("a(bb|b1|b2)c", $var); abbc、ab1c、ab2c にマッチ
$rcd = ereg("^abc", $var); abc で始まるとマッチ
$rcd = ereg("abc$", $var); abc で終わるとマッチ
$rcd = ereg("^$", $var); 空行とマッチ
$rcd = ereg("ab?c", $var); ac、abc にマッチ
$rcd = ereg("a.*c", $var); ac、abc、ab1c などにマッチ
$rcd = ereg("a.+c", $var); abc、ab1c などにマッチ
$rcd = ereg("[0-9]{1, 2}", $var); 0 ~ 99 にマッチ
$rcd = ereg("[a-zA-Z]{8,}", $var); 英字 8 文字以上にマッチ
$rcd = ereg("あいうえお{2}", $var); 「あいうえおお」にマッチ
$rcd = ereg("(あいうえお){2}", $var); 「あいうえおあいうえお」にマッチ
だそうな。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm

あと正規表現で混乱しそうなやつ。
?についてメモ。
マッチするのはタイトル直前にある<br>から「周辺地図」の直前にある<li>まで。<li>が5個あるのですが、この正規表現では一番最後にある<li>までマッチしてしまうのです。

それは、最長一致というルールがあるからなんです。
そのため、ルールに当てはまる一番最長の部分までがヒットしてしまうのです。

このままではいらない部分までマッチしてしまうので、最初に見つけた<li>までにマッチさせたいときはどうすればいいでしょうか?
実はさっきの正規表現で「.+」の後に「?」をつければ、最短一致になるので思った通りの部分が抜き出せるようになるのです。
http://shain.tomocreative.net/2007/05/post_8.html
ページトップへ  トラックバック0 コメント0
phpでvirtualによるCGI呼び出し
2008-01-12-Sat  CATEGORY: php
phpでCGI呼び出そうとしてvirtual使おうと思ったところ、絶対パスでつまづいたのでメモ書き。

通常、ファイルの呼び出し(例えばfile()関数とか)で絶対パスだとこんな感じ。
/virtual/登録ID/public_html/サイトトップURL/
の後に呼び出したいファイル名までの経路を書く。
例えばnewというフォルダの中のread.txtというファイルを読み込みたければ、
file("/virtual/登録ID/public_html/サイトトップURL/new/read.txt");
と書く。
(※サイトトップURLはhttp://www.yahoo.co.jpならwww.yahoo.co.jpの部分)

で、cgi呼び出そうと同じように記述したら「無いよ!」って言われちゃいまして、
試行錯誤したのですが、その結果、
/virtual/登録ID/public_html/サイトトップURL
の部分がいらないみたいな予感がするわけです。
上の例だと、/new/read.txtだけでいい。
なんでかね。
なんで違うのかね。
いまのところ正常だけど気になるわい。
ページトップへ  トラックバック0 コメント0
HDDをフォーマットするブラクラ
2008-01-07-Mon  CATEGORY: オンラインメモ
HDDをフォーマットするwebサイトということで大晦日辺りから騒いでたみたいです。
その対策まとめwikiもできてるけど、wikiは自由に書き込めるはずなんでそこら辺はご注意を。
悪意をもった物好きが嘘の対策内容を書き込んだりするかもしれません。

で、まとめwikiの対策にhostsファイルに、


\system32\drivers\etc
にあるhostsファイルをメモ帳などエディタで開いて、

127.0.0.1 localhost
に下記を書き加える

0.0.0.0 snipr.com
0.0.0.0 cunt.multiservers.com


とあったので0.0.0.0って何を参照するんだろうなーと思ったんですけど、
単にアクセスを強制的にエラーにするだけみたいですね。
当たり前といえば当たり前か。
この、
0.0.0.0 *****
ってする書き換え、JWordのインストール検知対策の方法としてwikipediaにありました。
これはJWord関連サーバーにコンピュータがアクセスしようとした時に、IPアドレスを強制的に0.0.0.0としてしまって、アクセスを強制的にエラーにする方法である。ゆえにコンピュータからは、これらのドメインに全くアクセスできなくなることに注意されたい。
とおっしゃっております。
ためしに
0.0.0.0 www.yahoo.co.jp
ってやってみたのですけど、普通に表示されるのはなんでだろ・・・。
ファイルのダウンロードとweb表示もまた違うのかね。

※追記
ヤフーも表示されなくなりました。
ブラウザ一旦落としてまた起動させたら表示されなくなったけどなぜだろうか。
ページトップへ  トラックバック0 コメント0
<< 2008/01 >>
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -


余白 Copyright © 2005 僕のネット帳. all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。