前のページ|次のページ

CALL PRXPOSNルーチン

キャプチャバッファの開始位置と長さを返します。

カテゴリ: 文字列マッチング
制限事項: PRXPARSE関数とともに使用します。
このCALLルーチンに必要なPRXPARSE関数にDBCSとの互換性がないため、DBCSおよびMBCSデータの処理にこの関数を使用しないでください。

構文

必須引数

regular-expression-id

PRXPARSE関数によって返されるパターン識別子の値が含まれる数値変数を指定します。

capture-buffer

開始位置と長さを取得するキャプチャバッファを識別する値が含まれる数値の定数、変数または式です。

  • capture-bufferの値が0の場合、CALL PRXPOSNは一致全体の開始位置と長さを返します。
  • capture-bufferの値が1から開始かっこ数までの間の場合、CALL PRXPOSNはそのキャプチャバッファの開始位置と長さを返します。
  • capture-bufferの値が開始かっこ数よりも大きい場合、CALL PRXPOSNは開始位置と長さとして欠損値を返します。

start

キャプチャバッファが見つかった位置の戻り値が含まれる数値変数です。

  • capture-bufferの値が見つからない場合、CALL PRXPOSNは開始位置としてゼロ値を返します。
  • capture-bufferの値がパターン内の開始かっこ数よりも大きい場合、CALL PRXPOSNは開始位置として欠損値を返します。

オプション引数

length

前の一致したパターンの長さの戻り値が含まれる数値変数です。

  • パターンマッチが見つからない場合、CALL PRXPOSNは長さとしてゼロ値を返します。
  • capture-bufferの値がパターン内の開始かっこ数よりも大きい場合、CALL PRXPOSNは長さとして欠損値を返します。

詳細

CALL PRXPOSNルーチンは、PRXMATCH、PRXSUBSTR、PRXCHANGE、PRXNEXTのいずれかの結果を使用してキャプチャバッファを返します。CALL PRXPOSNルーチンが有益な情報を返すには、これらの関数のいずれかで一致が見つかる必要があります。
キャプチャバッファは一致の一部としてかっこで囲まれ、正規表現で指定されます。CALL PRXPOSNはキャプチャバッファのテキストを直接返しません。テキストを返すには、SUBSTR関数を呼び出す必要があります。
パターンマッチングの詳細については、Perl正規表現(PRX)を使用したパターンマッチングを参照してください。

比較

CALL PRXPOSNルーチンはPRXPOSN関数と似ていますが、CALL PRXPOSNはキャプチャバッファ自体ではなくキャプチャバッファの位置と長さを返す点が異なります。
Perl正規表現(PRX)の関数とCALLルーチンは、連携してパターンと一致する文字列を操作します。これらの関数およびCALLルーチンのリストと概要説明については、カテゴリ別のSAS関数とCALLルーチンの文字列マッチングカテゴリを参照してください。

例1: 一致内の部分一致の検索

次の例では、正規表現を検索し、PRXPOSNルーチンを呼び出して3つの部分一致の位置と長さを特定します。
data _null_;
   patternID = prxparse('/(\d\d):(\d\d)(am|pm)/'); 
   text = 'The time is 09:56am.';
   if prxmatch(patternID, text) then do;
      call prxposn(patternID, 1, position, length);
      hour = substr(text, position, length);
      call prxposn(patternID, 2, position, length);
      minute = substr(text, position, length);
      call prxposn(patternID, 3, position, length);
      ampm = substr(text, position, length);
      put hour= minute= ampm=;
      put text=;
   end;
run;
次の出力がログに書き込まれます。
hour=09 minute=56 ampm=am text=The time is 09:56am.

例2: 時間データの解析

次の例では、時間データを解析して結果をSASログに書き込みます。
data _null_;
   if _N_ = 1 then
   do;
      retain patternID;
      pattern = "/(\d+):(\d\d)(?:\.(\d+))?/";
      patternID = prxparse(pattern);
   end;
  
   array match[3] $ 8;
   input minsec $80.;
   position = prxmatch(patternID, minsec);
   if position ^= 0 then
   do;
      do i = 1 to prxparen(patternID);
         call prxposn(patternID, i, start, length);
         if start ^= 0 then
            match[i] = substr(minsec, start, length);
      end;
      put match[1] "minutes, " match[2] "seconds" @;
      if ^missing(match[3]) then
         put ", " match[3] "milliseconds";
   end;
   datalines;
14:56.456
45:32
;
次の出力がログに書き込まれます。
14 minutes, 56 seconds, 456 milliseconds 45 minutes, 32 seconds

関連項目:

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