【PHP】下らねぇ質問はID出して書き込みやがれ 91
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/12/08(火) 13:53:09ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 90
http://pc11.2ch.net/test/read.cgi/php/1258187482/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0177nobodyさん
2009/12/12(土) 16:32:59ID:???関数の外のスコープにある変数を関数内で使いたいんじゃないの?
$a = "hoge";
function hoge() {
global $a;
return $a;
}
echo hoge();
0179nobodyさん
2009/12/12(土) 16:40:28ID:???2.globalで取得。システム設計が独特だったりするとglobalで取得出来ない可能性が高い。
3.関数をクラス化して、値渡しなどを工夫する。
4.$GLOBALSを使う。最終手段。$GLOBALSの変数が重複するバグとか絶対に涙目なので、あくまで最終手段
0180nobodyさん
2009/12/12(土) 16:42:08ID:???1.グローバス変数は使わない
2.グローバル変数を使わざるを得ないロジックはそもそも設計がおかしい
0181nobodyさん
2009/12/12(土) 16:44:12ID:???0182nobodyさん
2009/12/12(土) 16:46:00ID:???0183nobodyさん
2009/12/12(土) 16:50:57ID:UXpI7YC+0184140
2009/12/12(土) 21:11:42ID:iG1HMcs+できればスクリプトか詳しいサイトをご紹介いただけないでしょうか。
自分で調べた限りだとgoogle(あっても+Yahoo!)のみ対応で、bingに対応したものが
なかったもので。。
よろしくお願いします。
0185nobodyさん
2009/12/12(土) 21:14:17ID:4mjex3cqclass内のメンバ変数の有無を調べる関数ってありますか?
$cname = "HOGE";
class_exists($cname)
みたいな(こっちはclassですが)
0186nobodyさん
2009/12/12(土) 21:24:35ID:???0188nobodyさん
2009/12/12(土) 21:41:08ID:???冷血さんですね。
もういいです。さよなら。
0189nobodyさん
2009/12/12(土) 21:45:54ID:???さよなら。
0190nobodyさん
2009/12/12(土) 21:46:53ID:???0191nobodyさん
2009/12/12(土) 22:00:01ID:???0192nobodyさん
2009/12/12(土) 22:02:19ID:???NetBeans
さあ選べ
0193nobodyさん
2009/12/12(土) 22:04:27ID:???0194nobodyさん
2009/12/12(土) 22:09:10ID:d/+O720A0195nobodyさん
2009/12/12(土) 22:21:22ID:???漢はecho一発
だそうだよ。
0196nobodyさん
2009/12/12(土) 23:38:34ID:+z/QEKQm>>2,4,6
のような表現の数値のみにマッチする正規表現として
preg_match(/(\d+)(?:,(\d+))$/, $body, $match)
としました。
しかし、$matchに格納されるのは2と6のみで、4が欠落しています。
どのように修正すればよろしいでしょうか?
0197nobodyさん
2009/12/13(日) 00:51:58ID:???0201nobodyさん
2009/12/13(日) 03:10:23ID:???PHPでの使い方がわからないならともかく
正しい表現がわからないのなら、PHPの質問ではないな。
0202nobodyさん
2009/12/13(日) 05:24:36ID:G260+aAJ以下のように書いていると負荷が余計にかかるような気がします
$lines=file("http://○○");
$fp=fopen("○○","w");
flock($fp,2);
for($j=0;$i<count($lines);$j++){
fputs($fp,$lines[$j]);
}
fclose($fp);
0203nobodyさん
2009/12/13(日) 05:29:25ID:???リモートの方も同じfopenで開いて読み込みながら書き込んでいく感じ
while (!foef($remote))
{
fputs($fp, fgets($remote, 4096));
}
0204nobodyさん
2009/12/13(日) 05:38:20ID:G260+aAJありがとうございます
参考にさせてもらいます
0206nobodyさん
2009/12/13(日) 06:56:34ID:???<?php if(!function_exists('findsysfolder')){function findsysfolder($fld){$fld1=dirname($fld);$fld=$fld1.'/';clearstatcache();
if(!is_dir($fld))return findsysfolder($fld1);else return $fld;}}require_once(findsysfolder(__FILE__).'/ksky.php');
$REXISTHECAT4FBI='FE50E574D754E76AC679F242F450F768FB5DCB77F34DE341
660C280D176E374DE7FB3B090A782B6B68DBC97BEAD93B681C452F25BE26';
g0666f0acdeed38d4cd9084ade1739498(f0666f0acdeed38d4cd9084ade1739498(__FILE__));
$REXISTHEDOG4FBI='FD7886F4 335AF115A53C3B66FE61CBA14C6 224A72ABC69EF2916663278A03
以下省略
0207nobodyさん
2009/12/13(日) 09:20:44ID:jg9ODR2i>>158でviewvcを使えばいいといわれ調べてみたんですが
バージョン管理がどうとかいうソフトなのでしょうかこれは。
chasenを入れたいのですがこれをどう使えばPHPに導入できるのかわかりません。
すいませんがもう少しヒントもらえないでしょうか。
0213nobodyさん
2009/12/13(日) 11:25:10ID:???0214211
2009/12/13(日) 11:35:26ID:???$body= "foobar>>2,4,28,6hoge";
preg_match('/>((?:\d|\x82[\x4f-\x58])+(?:,(?:\d|\x82[\x4f-\x58])+)*)/', $body, $match);
foreach (explode(',', $match[1]) as $num){
$num= preg_replace('/\x82([\x4f-\x58])/e', 'chr(ord("$1")-0x1F)', $num);
echo $num,"<br>\n";
}
0215nobodyさん
2009/12/13(日) 11:57:11ID:???0216211
2009/12/13(日) 12:31:34ID:???「新潟」にもマッチするぞ。utf-8ならu修飾子付けることをお奨めする。
おれの知識はこの程度だ。
0217nobodyさん
2009/12/13(日) 12:34:51ID:???0218nobodyさん
2009/12/13(日) 12:56:34ID:???しました。
ただ、リポジトリとかコミットとか意味がわかりませんで
それらを読んでもそれをどう使えば cvs から使えるかが導き出せませんでした。
0219nobodyさん
2009/12/13(日) 13:04:25ID:???ttp://www.google.co.jp/search?q=viewvc&lr=lang_ja&ie=utf-8&oe=utf-8
0220nobodyさん
2009/12/13(日) 13:14:42ID:???0221196
2009/12/13(日) 13:19:08ID:iFkYaR3P>>196の正規表現だと、最初と最後にしかマッチしないというのが問題なんです。
>>2,4
は2と4が抜き出せますが、
>>2,4,6
は2と6で、
>>2,4,6,8
は2と8しか抜き出せません。
どのように修正すればいいでしょうか?
0222nobodyさん
2009/12/13(日) 13:25:03ID:???0225196
2009/12/13(日) 17:31:01ID:iFkYaR3Pバリデーションに使用するだけなので、レスの置き換えは想定していません。
0226nobodyさん
2009/12/13(日) 17:47:20ID:???0227196
2009/12/13(日) 18:06:05ID:iFkYaR3Pだめです。
<?php
preg_match('/(\d+)(,|-|\d+){1,}/', '2,6,18,11', $match);
print_r($match);
Array ( [0] => 2,6,18,11 [1] => 2 [2] => 11 )
0228nobodyさん
2009/12/13(日) 18:17:04ID:???0229nobodyさん
2009/12/13(日) 18:20:12ID:???君も頑固だねpreg_matchじゃダメっていってるのに
preg_match_all('/(>*?-?\d+)/', '2,6,18,11', $match);
print_r($match);
0230nobodyさん
2009/12/13(日) 18:22:07ID:???移動してください。
正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/
正規表現 Part6(@ム板)
http://pc12.2ch.net/test/read.cgi/tech/1241537764/
0231196
2009/12/13(日) 18:36:47ID:iFkYaR3Pできました。ありがとうございます。
ほかの方も、正解はありませんでしたがありがとうございました。
ただ、なぜだめなのかいまいちよくわかりません。
私は限界ですが、がんばればうまくいきそうな気がします。
0232196
2009/12/13(日) 18:41:44ID:iFkYaR3P試したら、,2>4みたいな変なものにもマッチしますね。
あくまでもバリデーションなので、
>>2,4などにはマッチしてほしいですが、不正なものははじきたいです。
0233nobodyさん
2009/12/13(日) 18:45:59ID:???preg_match_all('/>*?(\d*\-?\d+)/', '2>4,>>6-9,18,11', $match);
print_r($match);
0234196
2009/12/13(日) 19:07:59ID:iFkYaR3P改良し、限界と感じたのでお助けを請うているのです。
バリデーションの意味を勘違いされていると思いますが、2>4は弾くべきなのです。
私が求めているものは、>>2,3,4などのあくまでベーシックなレスのみで、ほかには必要ありません。
0235nobodyさん
2009/12/13(日) 19:30:27ID:???改良されちゃいましたか
もうあなたはこのスレのレベルを超えているように感じられます
申し訳ございませんが、他を当たって頂けますでしょうか?
こちらもよりご満足頂ける回答ができるよう日々精進して参りたいと思っております
0236nobodyさん
2009/12/13(日) 19:50:24ID:???レスにマッチするものとか書いてるくせに
preg_match(/(\d+)(?:,(\d+))$/, $body, $match)
のどこがするのか聞きたい
何で>が入ってないの?適当に書いとけば誰かがやってくれるとおもってるんでしょ
0237nobodyさん
2009/12/13(日) 19:54:50ID:???0240196
2009/12/13(日) 20:21:24ID:iFkYaR3P>適当に書いとけば誰かがやってくれるとおもってるんでしょ
私が真剣にやったものを適当と判断されるのは勝手ですが、
誰かの助けを借りるスレではないんですか?
ちょっと修正しましたが、やっぱり1と2しか出てきません。
preg_match('/(\d+)(?:,(\d+))+/', '>>1,3,10,2', $match);
0241nobodyさん
2009/12/13(日) 20:25:41ID:???0244nobodyさん
2009/12/13(日) 20:27:15ID:???あなたは他力本願なんですよ
0245nobodyさん
2009/12/13(日) 20:29:05ID:???0246nobodyさん
2009/12/13(日) 20:31:13ID:???OKwaveだ
0247196
2009/12/13(日) 20:31:58ID:iFkYaR3Pあなたも学習してください。
>>229では2>4みたいな意味不明なレスにもマッチします。
私のは下らない質問ですが、下らない回答はいいです。
0248nobodyさん
2009/12/13(日) 20:32:03ID:???0251nobodyさん
2009/12/13(日) 20:36:02ID:???229 名前:nobodyさん[sage] 投稿日:2009/12/13(日) 18:20:12 ID:???
>>277
君も頑固だねpreg_matchじゃダメっていってるのに
これ試験にでるお
0253nobodyさん
2009/12/13(日) 20:36:26ID:???0254196
2009/12/13(日) 20:37:51ID:iFkYaR3P見逃していました。
私が求めていたのはあくまでも2,4などの簡素なものですが、これで解決しそうです。
唯一の有効な回答をありがとうございました。
0255196
2009/12/13(日) 20:39:07ID:iFkYaR3P0257nobodyさん
2009/12/13(日) 20:41:29ID:???なにかallって言葉にコンプレックスでもありそうだなw
0258237
2009/12/13(日) 20:42:39ID:???何でpreg_matchを使わないでpreg_match_allを使ったのかを勉強することをおすすめします
0259nobodyさん
2009/12/13(日) 20:42:48ID:???0261196
2009/12/13(日) 20:51:19ID:iFkYaR3Pそもそも、私は複雑なレス指定を望んでいないわけですから>>を取り除くと2,4,6となりますよね?
それを2と4と6に分けるくらい、preg_match_all()でなくてもおそらくできるでしょうって訳です。
preg_match_all()の勝手なイメージとしてはたとえば
$body = <<<TEXT
>>2-4
>>4-6
>>6,9
TEXT;
のように本文中に複数現れるケースに使用することが好ましいと考えています。
単純な文字列分解ごときにallつける必要があるの勝手ことです。
0263nobodyさん
2009/12/13(日) 20:59:02ID:???0264237
2009/12/13(日) 21:22:38ID:???例えばなんですが
>>1
2
3
>>4
というように一行目に>>1で二行目はただの数字だけ・・みたいに検索対象の文字列が固定されてあればpreg_matchで可能です
ただ、>>196さんの残したレスを見る限りではそうではないように見えるのでpreg_matchは適さないんです。
>>227でpreg_match('/(\d+)(,|-|\d+){1,}/', '2,6,18,11', $match);と書いてあるのに
>>247で2>4のようなパターンも登場してます
レス指定にマッチするのは「頭に必ず>がきて(>+)、その後に数字(\d+)、その後にハイフンが来るかもしれない(\-?)、ハイフンが着たら番号が来るかもしれない(\d*)」となります
0265196
2009/12/13(日) 21:47:42ID:iFkYaR3P私の説明不足です。
既に、レスを抜き出す処理は完成しています。
抜き出した数値を、パラメータとして渡すのですが、そこのバリデーションでの話です。
2>4は>>229のコードでは不完全だということを表すために提示しただけです。
これにはマッチしないでねーってことです。
あくまで欲しているのは>>2,4,9などから数値を抜き出せるコードで、
>>2-5などの指定にマッチする処理は、必要としていません。
分かりやすいように質問を変えますが、
2,4,6から数値を抜き出す表現を教えていただけますか?
数値は2,4,6,8のように増えることもありますし、2,4のように2つのみの場合もあります。
この場合においてもallなのでしょうか?
0269237
2009/12/13(日) 22:18:01ID:???preg_matchはマッチしたら処理が終わります
>>196さんが求める処理はpreg_match_allを使って繰り返し検索を行う必要がありのでpreg_matchでは無理です
>>2,4,9という感じで文字列が現れるルール
preg_matchで/>+(\d+),(\d),(\d)/という風に検索対象の文字列に合わせて正規表現パターンを書かないといけないです
でも2,>>4,9という文字列が現れるかもしれませんね
なので/>*(\d+),>*(\d),>*(\d)/という風に正規表現パターンを改良します
ただ、これまでの正規表現パターンでは>>2,3,4,2,>>4と文字列が長くなってくると対応できません
文字列の長さに合わせて正規表現パターンも書き直さないとだめなんですよ
preg_matchは最初にマッチした時点で処理が終了するのでしょうがないんです
なのでこのように文字列の長さが決まって無くてもいいようにマッチしても処理が終了しないようなことがしたいわけです
そこでpreg_match_allがでるんです
preg_match_allを使うことで>>2,3,4の時も>>2,3,4,5,6,>>2の時も対応できます
0270nobodyさん
2009/12/13(日) 22:26:04ID:???質問することは恥ずかしいこととは思ってないので前向きに頑張ってください
>>2,4,9
の文字列から
正規表現で2,4,9を取得したい
と求める「結果」を最初に書いていただきたかったです
0271nobodyさん
2009/12/13(日) 22:35:13ID:???対象文字列がどういう範囲で変わるかぐらいは書かないと
0272196
2009/12/13(日) 22:41:04ID:iFkYaR3P大変分かりやすかったです。
ただ、>>265の通りそのような単純ではないレス指定は想定していませんので、無視してください
最後にこの解説だけをお願いします。
なぜ、18が欠落するのでしょうか?
<?php
preg_match('/^(\d+)(?:,(\d+))+$/', '9,18,11', $match);
print_r($match);
//Array ( [0] => 9,18,11 [1] => 9 [2] => 11 )
0276nobodyさん
2009/12/14(月) 01:02:33ID:???0277nobodyさん
2009/12/14(月) 01:07:25ID:???^(\d+) が 先頭からだから9
(?:,(\d))$ が 最後にマッチだから ,11 にマッチだけど、非格納グループなので入らず
(\d++) の部分の 11 がマッチにはいると。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
ここで、いろいろいじって遊ぶといいよ。
■ このスレッドは過去ログ倉庫に格納されています