[過去ログ] 【PHP】下らねぇ質問はここに書き込みやがれ 14 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
993: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2024/10/29(火) 20:54:54.00 ID:zqRlJI/00(1/3) AAS
次スレ
【PHP】下らねぇ質問はここに書き込みやがれ 15
2chスレ:tech
994(1): デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2024/10/29(火) 22:11:10.45 ID:zqRlJI/00(2/3) AAS
>>992問題: PHPで (*SKIP) が使えない (>>947947(2): デフォルトの名無しさん (ワッチョイ d274-nV0L) [sage] 2024/10/21(月) 10:50:17.35 ID:hAiZn1ip0(1/6) AAS
環境: PHP 8.3.6, ubuntu24.04 LTS, oniguruma 6.9.9
mb_ereg_replace() に使う正規表現の中で (*FAIL) が使えません
PHP側で (*hoge) の形の正規表現パーツを無効化しているようですが
もし使えるようにする方法があれば教えて下さい
最近 oniguruma に (*SKIP) が実装されたので正規表現の高速化のために使いたいです
mb_ereg_replace()
外部リンク[php]:www.php.net
)
結論: 現在は使えないのが仕様
php8.3.12(最新安定版)ではphp_mbstringが対応していない
oniguruma6.6.9(最新リリースバージョン)にも入ってない(開発したばかりで未リリース状態)
なので通常は>>956,959956(2): デフォルトの名無しさん (ワッチョイ f2fc-opEg) [sage] 2024/10/21(月) 20:10:27.85 ID:QKrgL0if0(1) AAS
>947
preg_replaceで代替どうぞ
$pattern = '/foo(*SKIP)(*FAIL)|bar/u';
$replacement = 'baz';
$subject = 'foobár';
$result = preg_replace($pattern, $replacement, $subject);
echo $result; // foobaz
で公式リリースを待つが、
パフォーマンスの問題、或いは(現在開発中のphpアプリの)リリース時には使えるようになっているという読み等で、
GitHub上のonigurumaソースを自前でコンパイルして接続して使うのは自由
この場合の詳細は247が成功した後に報告してくれるから待てばいい
現在の作戦(981)の内容は以下(マクロは大文字で表記)
onigurumaは設定を自由に変更出来る
いくつかあるプリセットの内、ONIGURUMAを指定すれば(*SKIP)が使えるが、RUBYを指定しても使えない
現在のphpではデフォでRUBY指定であり、ONIGURUMA指定は出来ない --- (α)
なので、oniguruma側のRUBY設定値をONIGURUMA設定値で上書きし、
php側でRUBY指定しててもONIGURUMA指定での機能が使えるようにする
これだとonigurumaの再コンパイルだけで済むはず(=php_mbstringは変更無く使える)
この場合の問題は、ruby指定とoniguruma指定で完全な互換性がなかった場合に、(なお実際どうなのかは知らん)
他ソフト(laravel)等と組み合せると一部誤動作する可能性が出てくる事だが、
この場合はRUBYではなくEMACS等、
どう考えても誰も使ってないであろうマクロを潰せばいいだけなので、大した問題ではない
(とはいえ商用用途ではこれも許されないだろうが)
995: デフォルトの名無しさん (ワッチョイ 497b-vCJ4) [sage] 2024/10/29(火) 22:42:58.65 ID:zqRlJI/00(3/3) AAS
真面目に直すなら、αを修正してphp側からONIGURUMA指定出来るようにすればいい
これは970に書いたとおり、
php_mbregex.c:489:static size_t _php_mb_regex_get_option_string
php_mbregex.c:594:static bool _php_mb_regex_init_options
の2関数を修正すればよく、下側は979に書いたとおり以下3行追加、上側はその逆を追加するだけ(多分)
case 'o':
*syntax = ONIG_SYNTAX_ONIGURUMA
break;
この辺やる気有るのならCのソースは俺が書いてもいいが、報告その他は全部やってくれ
報告の仕方は 外部リンク:www.php.net の通り
ただしバグ修正ではなく仕様追加なので、メンテナの判断により(ソースコードが妥当でも)却下される可
能性はある(改行は規制回避)
>>994 すまぬ一部修正、規制に引っかかったついでに最後の段落書き足したら大文字にするのを忘れた
× ruby指定とoniguruma指定で
○ RUBY指定とONIGURUMA指定で
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.214s*