2017-11-03 2 views
0
select REGEXP_REPLACE('Tina Frederich Piedro', '\w+', '*') from table; 

をマスキング名と姓のために私は\w+これを使用していますが、それは* * *期待される出力のための真の正規表現は何を返しますか?REGEXP_REPLACE

入力;

Tina Frederich Piedro 

予想される出力。

T*** F******** P***** 
+0

アスタリスク(REGEXP_REPLACE( 'Tina Frederich Piedro'、 '(\ w)\ w *'、 '\ 1 ***') 'の番号のみをハードコードすることができます。そうしないと、 '\ w *'部分を追加して、アスタリスクの正確な数で置き換えるコードを追加します。 –

+0

FYI - \ wには、予期しない結果を返す可能性のある0-9とアンダースコア(さらに多分)が含まれています。 –

答えて

1

これは一般的な解決策ではありませんが、あなたのケースではうまくいく可能性があります。あなたは'*'秒で下ケースに文字を置き換えることができます。

select REGEXP_REPLACE('Tina Frederich Piedro', '[a-z]', '*', 1, 0, 'c') 

'c'は大文字と小文字が区別置き換えるためのものです。

+0

「McDonald」のように、姓に大文字と小文字を混在させることもできます。 –

0

私は決して正規表現のエキスパートではなく、答えを2つの段階に分けなければなりませんでした。私はもっ​​と能力の高い人が2つのステップを組み合わせることができると思います。しかし、これはトリックであり、名前や句読点の真中にある大文字、例えばオブライエンも考慮する。

select 
    regexp_replace(lowers_done,'\*[A-Z]','**') first_letters_only 
from 

(
select 
    regexp_replace('Tina McDonald O''Brian','[a-z]|[[:punct:]]','*') lowers_done 
from 
    dual 
) 

出力:

T *** M ******* O ******

+0

明らかに、これはサブクエリを使わなくても書くことができます。2つの別々の正規表現で何が起こっていたのかを明確に示すために、 –

0

それはセキュリティ上の理由のためだ場合は、マスキングを適用するDBMS_REDACTパッケージを使用することができます機密情報のパターンドキュメントはhere

私はそれがregexpソリューションではないことを認識しています。さらに、この機能はOracleからの追加ライセンスの対象となる可能性がありますが、オラクル社は重要なデータに対してPCI対応ソリューションに提案しています。

関連する問題