トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
5-17 スラッシュの前の最初の数字列以外を消去
正規表現パズル
置換を使って、
各行の、スラッシュの前の最初の数字列以外を消去する。
置換後
置換後
対象データ
Fa234st10999/2/3/4
Fa234st/2/3/4
23499/2/3/4
abcdefg
1234567
321abc654
////123/456
987/654/
//789
123//
正規表現
^(?=.*[0-9]+/).*?([0-9]+)(?=/).*$|^(?!.*[0-9]+/).*$
を
\1
に置換
解説
Oracleの正規表現での文字の置換のアレンジ問題です。
regexp_substr(英語)
^(?=.*[0-9]+/)が真である場合と、偽である場合で、場合分けしてます。
^(?=.*[0-9]+/)が真であることは、^(?=.*[0-9]+/)が偽であることの余事象、書き換えると、
^(?=.*[0-9]+/)が真であることは、^(?!.*[0-9]+/)が真であることの余事象なので、
互いに補集合となり、ブール代数の補元法則が使えます。
そして、ブール代数の補元法則の
_
A+A = 1
を使った正規表現となっています。
事象と集合
キーワードとなる数学用語を列挙すると
・場合分け
・余事象
・補集合
・補元法則
となります。