スクリプトガイド > データタイプ > 正規表現 > ルックアラウンドアサーション
公開日: 09/19/2023

ルックアラウンドアサーション

ルックアラウンドアサーションは、パターンをチェックしますが、結果の中でそのパターンを戻しません。先読みはパターンの前を探します。後読みはパターンの後ろを探します。

否定的先読みの例

否定的先読みは、指定のパターンの前にパターンがないことをチェックします。?!は、否定的先読みを示します。次の正規表現は、後に数字またはスペースが続かないカンマをマッチし、パターンをカンマとスペースで置き換えます。

Regex( "one,two 1,234 cat,dog,duck fish, and chips, to go",
	",(?!\d|\s)", ", ", GLOBALREPLACE );

"one, two 1,234 cat, dog, duck fish, and chips, to go"

肯定的先読みの例

肯定的先読みは、指定のパターンの前にパターンがあることをチェックします。 ?=は、肯定的先読みを示します。次の正規表現は、前述の否定的先読みと同じ結果になりますが、後に任意の小文字が続くカンマにマッチします。

Regex( "one,two 1,234 cat,dog,duck fish, and chips, to go",
	",(?=[a-z])", ", ",GLOBALREPLACE );

"one, two 1,234 cat, dog, duck fish, and chips, to go"

肯定的後読みの例

この例では、肯定的後読みの正規表現に「ssn=」または「salary=」のキーワードがマッチしますが、マッチしたテキストにキーワードは含まれません。マッチしたテキストは、ゼロ個またはそれ以上のドル記号、数字、ハイフンから成る文字列です。

data = "name=bill salary=$5 ssn=123-45-6789 age=13,name=mary salary=$6 ssn=987-65-4321 age=14";
redacted = Regex(data, "(?<=(ssn=)|(salary=))[$\d-]*", "###", GLOBALREPLACE);

"name=bill salary=### ssn=### age=13,name=mary salary=### ssn=### age=14"

後方参照を用いた置換で同じ結果を得るには、次のような正規表現を使います。((ssn=)|(salary=))はキャプチャするグループです。"\1"は、そのグループへの後方参照です。

data = "name=bill salary=$5 ssn=123-45-6789 age=13,name=mary salary=$6 ssn=987-65-4321 age=14";
redacted = Regex(data, "((ssn=)|(salary=))[$\d-]*", "\1###", GLOBALREPLACE);

"name=bill salary=### ssn=### age=13,name=mary salary=### ssn=### age=14"

後方参照については、後方参照とキャプチャするグループを参照してください。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).