前のページ|次のページ

CALL PRXDEBUGルーチン

DATAステップでPerl正規表現を有効にし、デバッグ出力をSASログに送信します。

カテゴリ: 文字列マッチング
制限事項: CALL PRXCHANGE、CALL PRXFREE、CALL PRXNEXT、CALL PRXPOSN、CALL PRXSUBSTR、PRXPARSE、PRXPAREN、PRXMATCH関数およびCALLルーチンとともに使用します。PRXPARSE関数はDBCSとは互換性がありません。

構文

CALL PRXDEBUG(on-off);

必須引数

on-off

数値の定数、変数または式を指定します。on-offの値が0ではなく正の値の場合、デバッグはオンになります。on-offの値が0の場合、デバッグはオフになります。

詳細

CALL PRXDEBUGルーチンは、Perl正規表現のコンパイル方法、およびパターンが文字値に一致した場合に実行する操作に関する情報を提供します。
特定のPerl正規表現関数呼び出しのデバッグ出力を確認する場合、プログラム内で複数回デバッグをオンおよびオフにできます。
パターンマッチングの詳細については、Perl正規表現(PRX)を使用したパターンマッチングを参照してください。

比較

Perl正規表現(PRX)の関数とCALLルーチンは、連携してパターンと一致する文字列を操作します。これらの関数およびCALLルーチンのリストと概要説明については、カテゴリ別のSAS関数とCALLルーチンの文字列マッチングカテゴリを参照してください。

次の例では、デバッグ出力を生成します。
data _null_;
      /* Turn the debugging option on. */
   call prxdebug(1);
   putlog 'PRXPARSE: ';
   re = prxparse('/[bc]d(ef*g)+h[ij]k$/');
   putlog 'PRXMATCH: ';
   pos = prxmatch(re, 'abcdefg_gh_');
      /* Turn the debugging option off. */
   call prxdebug(0);
run;
次の出力がログに書き込まれます。
PRXPARSE:Compiling REx '[bc]d(ef*g)+h[ij]k$' 1 size 41 first at 1 2 rarest char g at 0 5 rarest char d at 0 1:ANYOF[bc](10) 3 10:EXACT <d>(12) 12:CURLYX[0] {1,32767}(26) 14:   OPEN1(16) 16:     EXACT <e>(18) 18:     STAR(21) 19:       EXACT <f>(0) 21:     EXACT <g>(23) 23:   CLOSE1(25) 25:   WHILEM[1/1](0) 26:NOTHING(27) 27:EXACT <h>(29) 29:ANYOF[ij](38) 38:EXACT <k>(40) 40:EOL(41) 41:END(0) anchored 'de' at 1 floating 'gh' at 3..2147483647 (checking floating)  4 stclass 'ANYOF[bc]' minlen 7  6 PRXMATCH:Guessing start of match, REx '[bc]d(ef*g)+h[ij]k$' against 'abcdefg_gh_'...Did not find floating substr 'gh'...Match rejected by optimizer
次の項目は、前述のSASログで番号が付けられた行に対応します。
1 この行にはPerl正規表現のプリコンパイル済みの形式が表示されます。
2 sizeはPerl正規表現のコンパイル済み形式の値(任意の単位)を示します。41は照合する最初のノードのラベルIDです。
3 この行から正規表現のコンパイル済み形式でのプログラムノードのリストが開始します。
4 これら2つの行にはオプティマイザ情報が表示されます。上述の例では、オフセット1では部分文字列de、オフセット3から無限大までは部分文字列ghが一致に含まれる必要があることをオプティマイザが検出しています。パターンマッチをすばやく除外するため、Perlは部分文字列deを確認する前に部分文字列ghを確認します。
オプティマイザは、文字クラス(行5)、7文字以上(行6)の一致がfirst ID (行2)で開始する情報を使用する可能性があります。

関連項目:

前のページ|次のページ|ページの先頭へ