このセクションは完成していないが、 幾つかの興味深い、非標準なRXの機能に対するポインターを集めている。
RXは、幾つかの一般的でない正規表現構文をサポートしている。
[[:cut N:]]
は pmatch[0].final_tag
をNに設定し、マッチン
グを即座に停止させる。Nが0であればマッチ全体が失敗し、それ以外なら成功
する。
[[:(:]] ... [[:):]]
は \( ... \)
に似ているが、pmatchエン
トリを変更することがなく、マッチした部分式が括弧つき部分式の数に含めら
れない点が異なっている。
[[:(:]] ... [[:):]]
は、正規表現の解析に関する括弧の機能は使いた
いが部分式の場所に関する情報は必要ないようなときに使うことができる。
[[:(:]] ... [[:):]]
を使う理由が二つある:
1. regexec will run faster. regexがより高速に実行される。
現時点では、八個の後方参照可能な部分式 \1 .. \9
だけがサポートさ
れている(訳注: 九個ではないの?)。[[:(:]] ... [[:):]]
を使うこと
は、たくさんの括弧がある式において後方参照可能な部分式を節約する方法で
ある。
regncomp
と regnexec
はregcomp
と regexec
の
(非標準の)一般化である。
二つのミステリアスなパラメータを、性能と使用メモリのトレードオフのため に使うことができる。
コンパイル時においては、その二つとは RX_DEFAULT_DFA_CACHE_SIZE
と
RX_DEFAULT_NFA_DELAY
である。
もしこれらをいじくりまわしたいのなら(そうしないことをお奨めしておくけれ ども)、あなたのアプリケーションやメモリ状況を良く調べることをお奨めする。 二つのパラメータを修正して、あなたが想定する典型的な正規表現の作業負荷で の結果を試験する。
以下の対応する変数をいじることによって、これらのパラメータを 実行時(正規表現関数のいずれかを呼び出す前)に設定することが可能である:
rx_default_cache->bytes_allowed
rx_basic_unfaniverse_delay
rx_make_solutions
, rx_next_solution
, rx_free_solutions
は、もう一つの低水準POSIX関数である。これらの関数を使うことでコンパイル
済み正規表現とメモリの中で連続していない文字列や、一時に全体がメモリに
収まらないような文字列を比較することができる。
rxposix.cにあるそのコードは、それらの関数をどのように使うかを説明してい る。
あなたが興味を持っているのが純粋な正規表現(pmatchデータもなく、後方参照
もなく、数え上げ部分式(counted subexression)もない)のみであるのなら、
rx_parse
を使って正規表現を解析し、その結果を rx_unfa
を使
ってnfaへ変換し、さらにrx_init_system
, rx_advance_to_final
,
rx_terminate_system
を使ってdfaを実行することができる。`rgx.c'
にあるdfa手法のプリミティブ(primitive)はちょっとしたガイドになるかもし
れない。