[過去ログ] Regular Expression(正規表現) Part16 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
538(1): デフォルトの名無しさん [sage] 2022/10/29(土)13:09 ID:ec13kmtS(1/2)
●Regular Expressionの使用環境
PCRE2
●検索か置換か?
検索
●説明
(..[\0@-g]\0){147}などを高速に検索したい
●対象データ
メガ単位のバイナリファイル(リトルエンディアン)
●希望する結果
説明は一例なので前中後にリテラルパターンが入る事もありますが(16KiBを越える事も)、固定長で
一定範囲だが不明な32bit値(0または0x00400000〜0x00670000付近)を含むブロック位置を列挙したいです
現状PCRE2で検索は出来ていますが、Intel Hyperscanだと
util/determinise.h:determinise:162:succ_id 16383 >= 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ライブラリが有れば教えて欲しいです
540: デフォルトの名無しさん [sage] 2022/10/29(土)19:42 ID:ec13kmtS(2/2)
>>539
文字クラス[\0@-g]なので表記を統一するなら[\x00\x40-\x67]になります
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.040s