Regular Expression(正規表現) Part16at TECHRegular Expression(正規表現) Part16 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト550:デフォルトの名無しさん 22/10/29 13:09:46.30 ec13kmtS.net ●Regular Expressionの使用環境 PCRE2 ●検索か置換か? 検索 ●説明 (..[\0@-g]\0){147}などを高速に検索したい ●対象データ メガ単位のバイナリファイル(リトルエンディアン) ●希望する結果 説明は一例なので前中後にリテラルパターンが入る事もありますが(16KiBを越える事も)、固定長で 一定範囲だが不明な32bit値(0または0x00400000~0x00670000付近)を含むブロック位置を列挙したいです 現状PCRE2で検索は出来ていますが、Intel Hyperscanだと util/determinise.h:determinise:162:succ_id 16383 > 551:= state_limit 16383 ng_mcclellan.cpp:buildMcClellan:590:state limit exceeded rose_build_add.cpp:addOutfix:1779:could not build as either an NFA or a DFA ng.cpp:addGraph:507:could not compile component 0 with 592 vertices と言われて説明の例に限っては正規表現のコンパイルすら不可能です 32bit値は4バイト境界に限りませんが、ブロック先頭は4バイト境界なのでそこから高速化したいのですが 「(?>....)*?\K」を接頭しようとするとPCRE2_ANCHOREDはJITで使えませんし、そもそも遅くなるようです 今のところプログラム側でオフセットが4バイト境界のみを拾い、次の検索開始もアライメントしています コールアウトもお察し…こういったパターンに適した書き方、又はCライブラリが有れば教えて欲しいです 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch