前のページ|次のページ

CALL PRXSUBSTRルーチン

パターンに一致する部分文字列の位置と長さを返します。

カテゴリ: 文字列マッチング
制限事項: PRXPARSE関数とともに使用します。
このCALLルーチンに必要なPRXPARSE関数にDBCSとの互換性がないため、DBCSおよびMBCSデータの処理にこの関数を使用しないでください。
操作: %SYSCALLマクロステートメントで呼び出されると、CALL PRXSUBSTRの引数から引用符が削除されます。詳細については、 CALLルーチンと%SYSCALLマクロステートメントを使用する を参照してください。

構文

必須引数

regular-expression-id

PRXPARSE関数によって返されるID番号の値が含まれる数値変数を指定します。

source

検索する文字定数、変数または式を指定します。

position

パターンが開始されるsourceの位置の戻り値が含まれる数値変数です。一致が見つからない場合、CALL PRXSUBSTRは0を返します。

オプション引数

length

パターンに一致する部分文字列の長さの戻り値が含まれる数値変数です。一致が見つからない場合、CALL PRXSUBSTRは0を返します。

詳細

CALL PRXSUBSTRルーチンはPRXPARSEからパターンを使用して変数sourceを検索し、文字列の開始位置を返します。指定されている場合は一致する文字列の長さも返します。デフォルトでは、特定の位置から始まる複数の文字にパターンが一致する場合、CALL PRXSUBSTRでは最も長い一致が選択されます。
パターンマッチングの詳細については、Perl正規表現(PRX)を使用したパターンマッチングを参照してください。

比較

CALL PRXSUBSTRはPRXMATCHと同じマッチングを実行しますが、CALL PRXSUBSTRでlength引数を使用して、一致に関するより多くの情報を取得することもできます。
Perl正規表現(PRX)の関数とCALLルーチンは、連携してパターンと一致する文字列を操作します。これらの関数およびCALLルーチンのリストと概要説明については、カテゴリ別のSAS関数とCALLルーチンの文字列マッチングカテゴリを参照してください。

例1: 部分文字列の位置と長さの検索

次の例では、文字列から部分文字列を検索し、文字列内の部分文字列の位置と長さを返します。
data _null_;
      /* Use PRXPARSE to compile the Perl regular expression. */
   patternID = prxparse('/world/');
      /* Use PRXSUBSTR to find the position and length of the string. */
   call prxsubstr(patternID, 'Hello world!', position, length);
   put position= length=;
run;
次の出力がログに書き込まれます。
position=7 length=5

例2: 部分文字列内の一致の検索

次の例では、avenue、drive、roadを含む住所を検索し、見つかったテキストを抽出します。
data _null_;
   if _N_ = 1 then 
   do;
      retain ExpressionID;
         /* The i option specifies a case insensitive search. */
      pattern = "/ave|avenue|dr|drive|rd|road/i";
      ExpressionID = prxparse(pattern);
   end;
   input street $80.;
   call prxsubstr(ExpressionID, street, position, length);
   if position ^= 0 then
   do;
      match = substr(street, position, length);
      put match:$QUOTE. "found in " street:$QUOTE.;
   end;
   datalines;
153 First Street
6789 64th Ave
4 Moritz Road
7493 Wilkes Place
;
run;
次の出力がログに書き込まれます。
"Ave" found in "6789 64th Ave" "Road" found in "4 Moritz Road"

関連項目:

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