トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

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
を使った正規表現となっています。

事象と集合

キーワードとなる数学用語を列挙すると
・場合分け
・余事象
・補集合
・補元法則
となります。