正規表現、最初のとっかかり。

楽をしたい、確実性を取りたい人は知っている、「正規表現」について自分なりにまとめました。

■はじめに


自分の職場では本番環境でリリース作業を行った際、エビデンスとしてログを提出する必要があります。

このログですが、個人情報保護、ビジネスセキュリティの観点からIPや個人情報はマスキングを行う必要があります。

自動で行ってくれれば楽なのですが、なんだかんだ結局自分でマスキングを行うケースが多いです。

そこで、かなり必要となってくる技術が「正規表現」となってくるわけです。



■そもそも正規表現って?


正規表現とは文字列の集合を一つの文字列で表現する方法の一つです。




プログラミング言語にはほぼ用いられており、サクラエディタや秀丸などテキストエディタでも使うことができます。

業務を行っていく中でこんなこと、あると思います。


・確認の終わった作業ログに大量の人の名前。
 このままだと個人情報漏洩につながるからマスキングを行う必要がある

・全角スペースと半角スペースが混在したテキストから全角スペースを取り除きたい

こういったときに力を発揮するのが正規表現です。


正規表現は検索や置換で力を発揮します。

たとえば以下のようなログがあったとします。


last_name,first_name=AA,BBB

last_name,first_name=あいう,えお



明らかに名前ですので、マスキングしなければなりません。

しかし、当然名前は文字数が異なったりひらがな・漢字・なかにはアルファベットが含まれることもあるわけです。

これらはメタ文字を使用することで漏れなく拾い上げることができます。


メタ文字とは、その文字本来の意味とは異なり、プログラムで特別な意味を持たせた文字のことです。

メタ文字は複数あり、それぞれ意味が異なります。





さて、上記のログで名前の部分である「AA,BBB」と「あいう,えお」がヒットする正規表現を考えてみます。


「last_name,first_name=」の部分は共通ですので、このまま使います。

「,」の前後は文字数が異なっています。ですので、任意の1文字を表す「.」を使用してもダメというわけです。

この場合はメタ文字を組み合わせることで対応します。

「.*」とすると任意の1文字+直前の文字の0個以上の並び=任意の文字の0個以上の並びを該当させることができます。

0個以上の並びというのが分かりづらいですが、要はなくてもいいということです。

これを使うことで1文字でもヒットさせることができます。


よって正規表現は以下となります。

「last_name,first_name=.*,.*」

「.*,.*」で「,」の前後が何文字でもヒットさせられるため、すべての名前を拾うことができます。


マスキングするには正規表現を使用した部分に一定の文字で置換してあげれば完了です。





では、次は以下のログで考えてみます。


(last_name,first_name)=(AA,BBB)

(last_name,first_name)=(あいう,えお)


先程の例から「(」・「)」で囲まれている点が異なっているだけですが、この「(」・「)」は正規表現で使用されるメタ文字に存在します。

一応「.last_name,first_name.=.*,.*」という形でヒットさせることはできますが、
「.」は1文字の任意の文字であるため、以下の場合もまとめてヒットさせてしまいます。


「[last_name,first_name]=[AA,BBB]」

「last_name,first_name」=「AA,BBB」


(last_name,first_name)=(AA,BBB)の()を削りたいという場合は違うものまで削りかねません。

こういう場合は正しく()として検索をかけるために()をメタ文字ではないと判断させる必要があります。

その場合は「\(」・「\)」とエスケープ文字と言われる「\」を入れることで対応します。

「\」は一字後をメタ文字ではなく本来の意味の文字で認識させることができます。


よって正規表現は以下となります。

「\(last_name,first_name\)=\(.*,.*\)」



■最後に


ログでマスキングを行う場合など行数が多い場合、どうしても手動で行うとマスキング漏れが発生する可能性が高くなります。
そこで正規表現を使うことで早く正確にマスキングを行うことができます。

しかし、正規表現を正しく設定できていることが絶対条件となりますので、
どうしてこう書けばこうなるのか仕組みを理解することが正規表現で楽をする第一歩となります。

Additional Images




Comments

Add Your Comments

Contact Us
Let us find the perfect source code for your app.

Become a PieceX Insider!