ルックアラウンドアサーションは、パターンをチェックしますが、結果の中でそのパターンを戻しません。先読みはパターンの前を探します。後読みはパターンの後ろを探します。
否定的先読みは、指定のパターンの前にパターンがないことをチェックします。?!は、否定的先読みを示します。次の正規表現は、後に数字またはスペースが続かないカンマをマッチし、パターンをカンマとスペースで置き換えます。
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"
後方参照については、後方参照とキャプチャするグループを参照してください。