$MATCH (ObjectScript)
構文
$MATCH(string,regexp)
引数
引数 | 説明 |
---|---|
string | 一致対象の文字列。 |
regexp | string に一致させる正規表現。正規表現は、1 つ以上のメタ文字で構成し、リテラル文字を含めることもできます。 |
説明
$MATCH は、string と regexp が一致する場合に 1、string と regexp が一致しない場合に 0 を返すブーリアン関数です。既定では、マッチングで大文字と小文字が区別されます。
ObjectScript は、$LOCATE および $MATCH 関数で構成された正規表現をサポートします。
-
$MATCH は、正規表現と string の完全一致を検出し、一致が発生したかどうかを示すブーリアンを返します。
-
$LOCATE は、正規表現と string の部分一致を検出し、最初の一致の位置 (およびオプションで値) を返します。
%Regex.MatcherOpens in a new tab クラスの Match()Opens in a new tab メソッドは、同じ機能を提供します。%Regex.MatcherOpens in a new tab クラスは、正規表現を使用するための追加の機能を提供します。
その他の ObjectScript のマッチング処理では、InterSystems IRIS パターン・マッチング演算子が使用されます。
引数
string
文字列として評価される式。この式には、変数名や数値、文字列リテラル、その他の有効な ObjectScript 式を指定できます。string には、制御文字を含めることができます。
regexp
string に一致させるために使用する正規表現。正規表現は、メタ文字とリテラルのいくつかの組み合わせで構成された文字列を評価する式です。メタ文字は、文字の種類と一致パターンを指定します。リテラルは、1 つ以上の単一文字、文字の範囲、または部分文字列との一致を指定します。広範囲にわたる正規表現の構文をサポートしています。詳細は、"正規表現" を参照してください。
例
以下の例は、最初の文字が大文字 (\p{LU}) で、1 文字以上の追加の文字 (+ 修飾子) が続き、この 2 番目の文字とそれ以降のすべての文字が単語の文字 (英字、数字、およびアンダースコア文字) (\w) であることを指定する正規表現と、文字列と一致させます。
SET strng(1)="Assembly_17"
SET strng(2)="Part5"
SET strng(3)="SheetMetalScrew"
SET n=1
WHILE $DATA(strng(n)) {
IF $MATCH(strng(n),"\p{LU}\w+")
{ WRITE strng(n)," : successful match",! }
ELSE { WRITE strng(n)," : invalid string",! }
SET n=n+1 }
以下の例は、16 進数の正規表現 (hex 41) が “A” の文字と一致するため 1 を返します。
WRITE $MATCH("A","\x41")
以下の例は、指定された文字列が、正規表現で指定されたスペース文字 (\s) および非スペース文字 (\S) の形式と一致するため 1 を返します。
WRITE $MATCH("A# $ 4","\S\S\s\S\s\S")
以下の例は、指定された日付が、正規表現で指定された桁数とリテラルの形式と一致するため 1 を返します。
SET today=$ZDATE($HOROLOG)
WRITE $MATCH(today,"^\d\d/\d\d/\d\d\d\d$")
この形式では、日付と月のそれぞれが 2 桁で指定される必要があり、このため先頭が 0 の場合 10 未満の値が必要になります。
以下の例は、文字列の各文字が正規表現の対応する文字の範囲内にあるため 1 を返します。
WRITE $MATCH("HAL","[G-I][A-C][K-Z]")
以下の例は、不正な regexp 引数を指定しています。これにより、以下に示すようにエラーが発生します。
TRY {
SET str="abcdef"
WRITE "match=",$MATCH(str,"\p{}"),!
}
CATCH exp {
WRITE !!,"CATCH block exception handler:",!
IF 1=exp.%IsA("%Exception.SystemException") {
WRITE "System exception",!
WRITE "Name: ",$ZCVT(exp.Name,"O","HTML"),!
WRITE "Location: ",exp.Location,!
WRITE "Code: ",exp.Code,!!
WRITE "%Regex.Matcher status:"
SET err=##class(%Regex.Matcher).LastStatus()
DO $SYSTEM.Status.DisplayError(err) }
ELSE {WRITE "Unexpected exception type",! }
RETURN
}