【PHP】下らねぇ質問はここに書き込みやがれ 15 (47レス)
上下前次1-新
12: (ワッチョイ 617b-8+ss) 2024/11/06(水)19:24 ID:r48zHH+W0(9/16) AAS
なのでこちらは、現状、
・(*SKIP)(*FAIL)の定義自体を見つけられない(が、どこかにあるはず)
ありがちなのは'SKIP'ではなく、最速の s[i]=='S' && s[i+1]=='K' ... とかの可能性で、
これも一応探したが、ない…
高速化の為に探索部分と一体化してて、grep等では探せないのかも…
・(*SKIP)(*FAIL)を探しに行っている関数 onig_st_lookup の定義が見つからない(が、これもどこかに定義されてるはず)
マクロで書き換えててgrepではヒットしない場合もあるが、一般的にはこれはあまりないはず…
という感じ
上記 fprintf については、
・$pattern = "....(*SKIP)(*FAIL)|[^あ]";を与えた場合、
省18
13: (ワッチョイ 617b-8+ss) 2024/11/06(水)20:57 ID:r48zHH+W0(10/16) AAS
ごめん間違ってた(>>11)
× > mbstring>grep -n -r FAIL *
○ > oniguruma>grep -n -r FAIL * のつもりが、やってなかった
やればぞろぞろ出てきたので、また続き報告します
14: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:01 ID:r48zHH+W0(11/16) AAS
oniguruma/regexec.c:6399: onig_builtin_fail が(*FAIL)の定義
oniguruma/regexec.c:6433: onig_builtin_skip が(*SKIP)の定義
なのは分かった
これらを呼び出してるところは、grep -n -r onig_builtin_fail * では出てこない
そこで、(これはC知ってないと無理だが、)
oniguruma>grep -n -r '#define' * | egrep -v '#define *[A-Z]' で小文字マクロを確認、onig_を付けてるケースが多いので、(※2)
oniguruma>grep -n -r builtin * とすると
src/regint.h:989:/* for definition of builtin callout */
src/regint.h:995: onig_builtin_ ## func, 0, 0, 0, 0, 0);\
src/regint.h:1004: onig_builtin_ ## func, 0, 0, 0, 0, 0);\
省8
15(2): 947 (ワッチョイ 6274-erF6) 2024/11/06(水)22:04 ID:D3puRbUV0(1/2) AAS
ありがとうございます、規制に引っかかったのでとりあえずこちらに書きました
agree.5ch.net/test/read.cgi/mango/1715675838/333
向こうにも書きましたがもう調べて頂かなくて大丈夫です、すみません..
16: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:04 ID:r48zHH+W0(12/16) AAS
同様に onig_st_lookup を探す
oniguruma>grep -n -r st_lookup * で
src/regint.h:241:#define st_lookup onig_st_lookup
src/st.c:237:st_lookup(st_table* table, register st_data_t key, st_data_t* value)
と分かる
中身見たら FIND_ENTRY を呼んでおり、これはすぐ上 src/regint.h:224:#define FIND_ENTRY で定義されてる
ちなみにすぐ下 src/regint.h:271:st_insert(register st_table* table, register st_data_t key, st_data_t value)
で毎回エンコードに合わせて作ってる雰囲気
なのでやはり、phpとonigurumaの正規表現のエンコ
ードが異なってて検索失敗かと
省4
17: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:06 ID:r48zHH+W0(13/16) AAS
多分onigurumaをコンパイルする際に『phpとやりとりする』(=APIの)正規表現の文字エンコ
ードを決められる
多分コンパイルオプションにあるから確認してみて
なおこれは対象文字列のエンコ
ードとは違うので注意
phpで言うと、
mb_ereg_replace(
string $pattern, <- 今問題になってるエンコ
ードはこれと
string $replacement, <- これ
省14
18: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:23 ID:r48zHH+W0(14/16) AAS
>>15
読んだ
> あなたのような優秀な方を空回りさせてしまうのは申し訳無さすぎますので..
これは気にする必要ない
俺は「たまには他人のコードも読むべき」と認識してるから、機会見つけて読んでるだけ
一人で読んでても仕様とか知らんしハマるので、他人がいるときに合わせて読んでるだけだから
実際君はかなり仕様を知ってるし、結果的に辿りやすくなってる
19: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:25 ID:r48zHH+W0(15/16) AAS
> oniguruma には自分で任意の (*hoge) を作って oniguruma に登録することが
> 出来るという機能があります
あーやっぱこれ目当てですか
> そこで php_mbregex.c の中で任意の (*hoge) を作って oniguruma に登録し、
> test.php を実行して任意の (*hoge) が正規表現のパーツとして認識されるか
> どうかを確認したところ、ちゃんと認識されました
さらっと書いてるけどこれは結構ハードル高いはず、まあ動いたのならすごいが
20: (ワッチョイ 617b-8+ss) 2024/11/06(水)22:25 ID:r48zHH+W0(16/16) AAS
> なので、(*hoge) の名前が文字化けして見つからないという訳ではなさそうです
orz、ハズレか…
> PHPでこの機能が使えているということは FAIL や SKIP も自前で
> 登録し直して使うことが出来るようになるかも知れません
まあ既に動いているのなら行けるはずではあるが、本来は書くのはエグいはず
コピペで移植してしまえであれば、
src/regint.h:989 の辺りから定義をコピペして php_mbreegxをコンパイルしてしまえば
php_mbregexがonigurumaとのキメラになるが動けば使えるはず
まあ頑張ってちょ
21: 947 (ワッチョイ 6274-erF6) 2024/11/06(水)23:13 ID:D3puRbUV0(2/2) AAS
ぶっちゃけ理解が全然追いついてないので明日またじっくり読ませて頂きますね
今日はありがとうございました
> なので、定義自体は存在してて、呼び出し部もある
> だから(*SKIP)(*FAIL)の文字列から検索出来てないだけ
ここが問題の核心ですね、どんなラスボスが潜んでいるのやら..
22: 947 (ワッチョイ 6274-erF6) 2024/11/07(木)19:42 ID:4fm0tpd+0(1/2) AAS
また規制のためこちらへ
agree.5ch.net/test/read.cgi/mango/1715675838/334-335n
昨日のレス把握完了です、これからお返事書きます(時間かかるかもです)
23(4): (ワッチョイ 821b-Eaw9) 2024/11/07(木)19:56 ID:bj7jL5K50(1) AAS
phperですがjsp+java案件に入りました
直近の課題として、phpとの差異に四苦八苦してます
まず大きな問題としては、今までほぼ手続き型のphpしか触っていなかったのでオブジェクト指向でのJavaに苦戦してること(今まではユーザー定義関数群を1ファイル内に記述して適宜各画面で読み込んでいたに過ぎず、継承やclass・フィールド・メソッドといった経験をしてこなかったこと)
次いで、jsp→サーブレットの仕組みや処理の流れを落とし込めていないこと。jspそのものはphpファイルのようにスクリプトを埋め込めることは理解しましたが、コンパイルや、そしてサーブレットに渡してゴニョゴニョするんやで❤の辺りから頭から煙出てます。
次いで、Javaとphpの記述の違いに悩んでる事。例として文字列の比較や、型宣言など。
諸先輩方はどんな風にして他言語をphp基準に身につけたか、そのほか叱咤激励あれば教えて欲しく投稿しました
省3
24: 947 (ワッチョイ 6274-erF6) 2024/11/07(木)20:11 ID:4fm0tpd+0(2/2) AAS
あ、私の件はもう解決したと言って良い状態なのでお構いなく..
私より >>23 さんを優先してあげてください、ありがとうございました〜
25: (ワッチョイ 92a7-FIyw) 2024/11/08(金)22:24 ID:P0eM6kWU0(1) AAS
コマンドラインに現在時刻を出力するプログラムで(Windows+cmd)
while(1){
echo date('H:i:s').PHP_EOL;
sleep(1);
}
これだと改行して延々と表示されます
改行せずに1行で更新し続けたいときはどうすればいいですか?
なんか制御文字入れたら出来たような気がするのですが忘れてしまいました
26(1): (ワッチョイ 821b-Eaw9) 2024/11/08(金)23:49 ID:CkExJYb90(1) AAS
私は>23ですが、こんなのどうでしょう
コードベタ書きは書き込み制限あるので一部ホワイトスペース入れたりお茶濁してるので適宜変換したください
?
while (1) {
echo "\r" . date('H:i:s');
sleep(1);
}
?
while (1) {
echo date('H:i:s')."\r";
省4
27(1): (ワッチョイ 92a7-FIyw) 2024/11/09(土)00:08 ID:LVg5ycPw0(1) AAS
>>26
確認できました!どうもありがとうございます
DELあたりが怪しいと0x08をどうにかしたら…
なんて思ってましたが見当違いだったようで(ノ∀`)
28: (ワッチョイ 821b-Eaw9) 2024/11/09(土)00:17 ID:dAMFh9qY0(1) AAS
>27
解決できたようで良かったです!
もしJava経験あれば私>23なのでアドバイスください!笑
29: 前スレ 947 (ワッチョイ 6274-erF6) 2024/11/09(土)01:35 ID:k7Zpjetb0(1) AAS
NGスレ06 にお返事を書いてましたが連投規制なのか続きを書けなくなりました
agree.5ch.net/test/read.cgi/mango/1715675838/334-n
書けない間についに問題の核心部分を突き止められました!
原因は oniguruma で廃止された onig_init(); を php_mbregex.c で使っていたことでした
github.com/php/php-src/blob/84400eefbb6f09ca7de971f49a86ab26520dfff3/ext/mbstring/php_mbregex.c#L115
PHPを知らない私は PHP_MINIT_FUNCTION(mb_regex) の MINI の部分を見て
「これはバージョン番号が小さい(=古い) oniguruma を使うときのものだな、きっと」
と思ってしまったのが大間違いでした。ググったところ、この関数は
「モジュールがロードされたときに最初に呼び出される関数」だそうです.....(T_T)
省9
30: (ワッチョイ 2bfe-oqWL) 2024/11/13(水)21:28 ID:4Dur4Zt/0(1) AAS
EOLの意味を理解しているのか聞いてみたい
31: (ワッチョイ 8374-Hy2o) 2024/11/13(水)22:10 ID:k2yyDMs20(1) AAS
clsコマンドでもいけそう、以前のログ全部消えるけどw
linuxfan.info/clear-command-prompt
上下前次1-新書関写板覧索設栞歴
あと 16 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.008s