NGワード絞り込みスレッド06 (531レス)
前次1-
抽出解除 レス栞

323: 947 2024/11/02(土)11:34 AAS
----------------------------- test.php ------------------------------
$pattern = "....(*SKIP)(*FAIL)|[^あ]";
$replacement = 'M';
$str = 'あいうab';
mb_regex_encoding("UTF-8");
$str = mb_ereg_replace( $pattern, $replacement, $str, "");
echo $str;
----------------------------------------------------------------------
Terminal のコマンド: php ./test.php
期待する置換結果: 'あいうaM'
省11
324: 947 2024/11/02(土)11:41 AAS
↑規制に引っ掛かかったため、前後のphpタグを削除しました

oniguruma のRUBY構文とONIGURUMA構文では正規表現オプションが異なります
( この場合の正規表現オプションとは /regex/i で言うと i の部分のことです)

ONIG_SYN_OP2_OPTION_RUBY
github.com/kkos/oniguruma/blob/master/doc/SYNTAX.md#3-onig_syn_op2_option_ruby-enable-options-imx-and--imx

ONIG_SYN_OP2_OPTION_ONIGURUMA
github.com/kkos/oniguruma/blob/master/doc/SYNTAX.md#30-onig_syn_op2_option_oniguruma-enable-options-imxwsdpy-and--imxwdsp

PHP側でONIGURUMA構文を有効にしたい場合、PHP側の正規表現オプションに
W, D, S, P などのオプションの追加を検討する必要があります
省11
325: 947 2024/11/02(土)12:03 AAS
oniguruma 付属のテスト用ファイル /sample/callout.c では (*FAIL) と (*SKIP) が問題なく動きます
RUBY オプションを ONIGURUMA オプションで上書きし、実行時の syntax に RUBY を指定した状態で
(*FAIL) と (*SKIP) が正常に機能します

あと少し気になったのが以下の点
これは古い oniguruma ライブラリにも対応出来るようにしただけかも知れませんが..

php_mbregex.c
github.com/php/php-src/blob/2b10cd1bebde7b9844ebb6e3e60127dfe7b195c5/ext/mbstring/php_mbregex.c#L115
> onig_init();

oniguruma/doc/API.ja
github.com/kkos/oniguruma/blob/f6723fd940b993b39b1535f71c8695867a5e92d1/doc/API.ja#L11
省8
333: 947 2024/11/06(水)21:58 AAS
貴重なお時間を使わせてしまって申し訳ないです..
私のほうでは現在以下のようなことをしています

oniguruma には自分で任意の (*hoge) を作って oniguruma に登録することが
出来るという機能があります

そこで php_mbregex.c の中で任意の (*hoge) を作って oniguruma に登録し、
test.php を実行して任意の (*hoge) が正規表現のパーツとして認識されるか
どうかを確認したところ、ちゃんと認識されました
なので、(*hoge) の名前が文字化けして見つからないという訳ではなさそうです

PHPでこの機能が使えているということは FAIL や SKIP も自前で
登録し直して使うことが出来るようになるかも知れません
省14
334: 947 2024/11/07(木)19:33 AAS
教えて頂いた fprintf を oniguruma に仕込んで test.php を実行してみた
ところ、初めてPHPで (*FAIL) と (*SKIP) が正常動作しました!

今までPHP上では一度も動いた試しが無かったのでびっくりです
突然動くようになった理由は現時点では不明です
fprintfを仕込んだだけで動くようになる訳はないので、これをする前に
した何等かの変更によって知らぬうちに動くようになっていたようです

今日は昨日頂いたレスを読みながらレスの中にあった fprintf を仕込んで
実行した以外の変更は行っていません

名前が見つからずにエラーになる原因は oniguruma に "FAIL" や
"SKIP" などが登録される前に callout_name_find されているのが原因でした
省11
335: 947 2024/11/07(木)19:37 AAS
↑文字化けした箇所をスペース入れて再掲します

今 日 は 昨 日 頂 い た レ ス を 読 み な が ら レ ス の 中 に あ っ た
fprintf を 仕 込 ん で 実 行 し た 以 外 の 変 更 は 行 っ て い ま せ ん
BBR-MD5:CoPiPe-b9305fee9fb7618408df50ab5ddaba83(NEW)
BBS_COPIPE=Lv:0
PID: 51675
Inq-ID: agr/8decafc3dfced771
Proc: 0.506344 sec.
This is Original
336: 947 2024/11/07(木)23:23 AAS
> 『自分でやるしかない事に注力すべき』
> onigurumaの新機能はいつか誰かが使えるようにしてくれる

そうですね、これは薄々分かっていたのですが (*SKIP) や
その他の (*hoge) で得られる速度面での恩恵が大きいので
使えるようにしたいと思いました。 (*SKIP) はまだリリース版には
入っていませんが、その他の (*hoge) はリリース版に入っています

せっかくマシンに oniguruma6.9.9 が入っているのにこれらが
使えないのはもったいないなと思いまして..

ついでに言うと、PHPは現在 ONIG_SYNTAX_RUBY を使っていますが
これはもう過去のものになりつつあり、ONIG_SYNTAX_ONIGURUMA に
省9
339: 947 2024/11/08(金)11:33 AAS
すいません、レス書くのに時間かかってます
以後断続的にこちらのスレ(NGワード絞り込み 06)に投下する予定です
BBR-MD5:CoPiPe-be6e497462ebded32ea24782557962f3(NEW)
BBS_COPIPE=Lv:0
PID: 28933
Inq-ID: agr/8df228dc393a262c
Proc: 0.475398 sec.
This is Original
340: 947 2024/11/08(金)15:21 AAS
> (14スレの) >> 956, >> 959 でラップし

なるほど、この pregのレスはラップに使えるようにとの意図だったのかも
知れませんね、それに気付かず申し訳ない..
( pregのレスを下さった方、ありがとうございます )

>「もうちょっとで行けそう」的にズルズルと無限に時間を食う事はよくある

私もズルズルしてしまいました、スレに質問を投下してからでも
もう2週間以上経ってますね.. これを仕事でやってたら怒られますね

> 全方向的に首を突っ込むだけでも色々蓄積はしていく
省9
341: 947 2024/11/08(金)16:11 AAS
> onigurumaがphp_mbsgringから見て正しく構成されているかを
> チェックしてるだけの様に見える

私もそのようなチェックだと思ってます、あと、正規表現コンパイル時と
正規表現を使って検索する時の整合性も確認しているかも知れません

> 渡す正規表現のエンコ-ド .. onigurumaのコンパイル時に指定出来るのでは

その通りです、onig_new() で正規表現をコンパイルするのですが
この引数としてエンコ-ドも指定します

> php_mbstring側(多分utf-8)
省15
342: 947 2024/11/08(金)17:59 AAS
> GlobalCalloutNameTable

私もこれに辿り着いてはいたんですがこの中身を printf する方法が
分からず断念してました
GlobalCalloutNameTable の定義からメンバーを辿れば良かったのですが
ポインタや型キャストに自信が無く、諦めてました

関数を順々に辿っていけば目的地には着くんですが、そこを見ても
何が何やらまったく分からず手詰まりになってました
なので2つの fprintf を示して下さったのはすごく助かりました
逆 転 満 塁 ホ ー ム ラ ン をありがとうございます

> onigurumaから「そんなフラグはない」とエラーを返させて..
省9
343: 947 2024/11/08(金)18:49 AAS
> 新しくコンパイルしたdllが使われてるか断定出来ないから

なるほど、printf を仕込むだけで良いことに気付いてませんでした..

oniguruma のソースを確認してるうちに oniguruma のバージョンが
入った定数があることに気付いたので php_mbregex.c に
これを出力する printf を仕込んでおきました

#define ONIGURUMA_VERSION_INT 60910
github.com/kkos/oniguruma/blob/f6723fd940b993b39b1535f71c8695867a5e92d1/src/oniguruma.h#L41

>> このテストファイルのコ-ドを php_mbregex.c に移植して動かしてみました
> これは php側のコンパイル環境も立ち上げたって事?
省20
345: 947 2024/11/10(日)14:25 AAS
残りのお返事はこちらに
u11.getuplo
ader.com/uplo
ader/download/1611

書き込み規制でどこにも書き込めない状態になっています..
BBR-MD5:CoPiPe-a56e545fd88169803345d44a00915a6c(NEW)
BBS_COPIPE=Lv:0
PID: 32897
Inq-ID: agr/8e039f20fe60d755
Proc: 0.496445 sec.
省1
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.419s*