[過去ログ] 【PHP】下らねぇ質問はここに書き込みやがれ 14 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
980(1): デフォルトの名無しさん (ワッチョイ 197b-QJZg) [sage] 2024/10/24(木) 01:07:24.54 ID:D6fJlQ4l0(1/3) AAS
>>978978(1): デフォルトの名無しさん (ワッチョイ 197b-QJZg) [sage] 2024/10/23(水) 23:43:08.35 ID:/9Lix2oc0(13/14) AAS
> 外部リンク[php]:www.php.net
とモロクソ書いてますな
そして何故かそのphp.netページにはデフォが何か書いてないが、
'r'指定すればRUBY指定(=ONIG_SYN_OP2_ASTERISK_CALLOUT_NAMEがON)になる
'p'指定でもいけるかも?
そしてこのフラグは mb_ereg_replace でも使えるらしい。つまり、
mb_ereg_replace(
string $pattern,
string $replacement,
string $string,
?string $options = null <- ここに指定、例えば 'r' or 'p'
): string|false|null
これで使えるなら、dllだけ差し替えればC側の修正は不要(そして多分これで上手く行く)
訂正、perlなので' p と思ってしまってたが z だった orz
× 'p'指定でもいけるかも?
○ 'z'指定でもいけるかも?
× 例えば 'r' or 'p'
○ 例えば 'r' or 'z'
あと var_dump(mb_regex_set_options(null)); でデフォを確認出来る
多分 "r" と出るはず
あと
>>973973(1): デフォルトの名無しさん (ワッチョイ 197b-QJZg) [sage] 2024/10/23(水) 22:52:29.22 ID:/9Lix2oc0(8/14) AAS
さらについで
ONIG_SYNTAXは仕様としては任意のビットを立てたり落としたり出来るはずだが、
実際はこの手の奴は大体テストが甘くて、組み合わせによっては動作しなかったりする
ではどうするか?と言えば、テスト済みであろう組み合わせに出来るだけ近い物を使う
今回ならRUBYかONIGURUMAに一番近いものだが、まあ、両方とも似たり寄ったりだな
しかしよく見ると、RUBY 指定なら ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME は立ってるではないか
php_mbstringのソースだけ見るとデフォはRUBY指定だから動くはず
となると何らかの理由で _php_mb_regex_init_options で他指定に切り替えられてるのか?
ならば手抜きで直すなら、
ext/mbstring/php_mbregex.c:607-656を全部コメントアウトして case 文を無視、
何をどう指定されても ONIG_SYNTAX_RUBY(あるいはONIG_SYNTAX_ONIGURUMA) になるようにしてしまうとか、かな
> しかしよく見ると、RUBY 指定なら ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME は立ってるではないか
> php_mbstringのソースだけ見るとデフォはRUBY指定だから動くはず
の部分も一部訂正だが、これは俺だけが悪いのではなく、GitHubのSYNTAXページも間違ってるな
上側の説明部分では
> 28. ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (enable (?{...}))
> Set in: Oniguruma, Perl, Perl_NG
> 29. ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME (enable (*name))
> Set in: Oniguruma, Perl, Perl_NG
となってて、Onigurumaならフル機能のように書かれてるが、下の表だと 28,29はOnigurumaでは付いてない
まあどっちが正しいのかは謎だが、意味不明な挙動するのはこの辺の問題もあるかもよ
これでは結局の所、RUBYやONIGURMUA指定で欲しい機能(29と30か?)が動くかどうかがよく分からんし
(まあ自前で立ててやればいいんですけどね)
982: デフォルトの名無しさん (ワッチョイ 197b-QJZg) [sage] 2024/10/24(木) 22:06:48.35 ID:D6fJlQ4l0(2/3) AAS
>>981981(1): 947 (ワッチョイ d274-nV0L) [sage] 2024/10/24(木) 12:35:15.79 ID:CfDH66X40(1) AAS
ありがとうございます、おかげ様でゴールが見えてきた感じです
すごい解析力に脱帽でした、読みながら「すごいな〜」を連発してしまいました
ちょっと昔に DAN KOGAI さんを見たときも衝撃を受けましたがそんな感じでした
本当は (*FAIL) が動くのを確認してからレスしたかったのですが
何かにハマっているらしくまだ成功していません
しかしもう PHP の問題というより oniguruma の問題ですので
ここから先は自力でなんとかなりそうです
> 28. 29.
これは表が間違ってます、以下は ONIG_SYNTAX_RUBY のオプション指定です
外部リンク[c]:github.com
#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby)
外部リンク[h]:github.com
今は (*FAIL) が使えるようになるかの手っ取り早い確認のために oniguruma ライブラリ側をいじり、
上記の ruby のオプション指定に oniguruma のものをコピペして動くかどうかを試していますが
今のところ結果が変わりません (ライブラリの置き換えに失敗している?)
ちょっと日数がかかるかも知れませんが成功したらご報告に伺います、ありがとうございました!
> これは表が間違ってます
確認した。md打つときに列が一個ずれて、onigがyesになるべき所がRubyの列に入ってるんだな
誰か余裕があったら指摘してあげて
> 上記の ruby のオプション指定に oniguruma のものをコピペして動くかどうかを試していますが
いいね。この方が早そうだ
> ちょっと日数がかかるかも知れませんが成功したらご報告に伺います、ありがとうございました!
はいまあ頑張って
ちなみに1つバグ、というか不一致を発見した
php_mbregex.c内、_php_mb_regex_init_options関数で、単純にRubyの r 指定等すると上書きしている為、
『最初に』指定しないと正しく動作しない(それ以前に指定したフラグが全部キャンセルされる)
しかしphp.netには『最後に』と明記してある
> モードを設定する際には、モード文字は最後に指定しなければなりません。
> 外部リンク[php]:www.php.net
これも誰か余裕有ったら指摘してあげて。勿論報告者の手柄にしていい
本来はPCRE側、つまりpreg_replaceと同様にすべき
となると多分フラグの順は問わないので、
2パスにして1周目でRegex構文モードを、2周目で各フラグを設定するようにCを修正するのが正しい
ドキュメント修正で済ませる場合は上記の通り、『最後に』と修正すれば終了
(Cの修正案が要るなら俺が書いてもいい、が、手続きとか知らんし面倒だから誰かやってくれ、勿論報告者が発見した事にしていい)
だからまあ、挙動不審なのはもしかするとフラグの指定順がまずいのかも
983: デフォルトの名無しさん (ワッチョイ 197b-QJZg) [sage] 2024/10/24(木) 22:08:58.49 ID:D6fJlQ4l0(3/3) AAS
> すごい解析力に脱帽でした
お世辞乙だがマジレスすると、実は普通に読めて、それがOSSの定義だったりするので、そんなにすごくもない
phpも30年間OSSとしてずっとメンテされており、当たり前だが多くの人が読めるからメンテ出来てる
だから逆に言えば、読めないコードはOSSとしては生き残れないし、30年は淘汰に十分な期間ではある
よって、長寿OSS、つまりphpやGNUやLinuxは、OSSに参戦するレベルの連中ならある程度読めて当然で、
「僕が読めないから汚いコ
ードだ」と寝言ほざいてる奴には「お前の頭がOSSの域に達してないだけだ馬鹿タレ」と返していい
ただ読めると言っても実際に読んでいるわけではなくて、
この仕様ならこういう作りだろうなという予測通りになっているのをなぞっているだけ
だから逆に、初心者や、まだ淘汰されてないOSSのコ
ードとかは、普通に読めない
(読む価値無いから無視でいいのだが)
だから今回は
> 以下のページは oniguruma の各パーツごとのオプション名を説明するページです
これが大きかった
そしてこれがpnp.net上のRegex構文モードと対になってるのが分かると、なるほどね、となった
まあ結局、一通り出来るようになって、書くのには苦労しなくなると、あとは仕様の理解度で差が出る、ということ
php_mbregexのコ
ードは悪いコ
ードではないね
愚直にやってるだけのドベタなコ
ードで、すごくもないが、でもこういうコ
ードがOSSとしては長生きするのだろうよ
(変な改行はNGワード逃れ)
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s