続く2つのドットをNullに置き換えようとしています。
SQL> select regexp_replace('..','[^\.]+\.','Null') from dual;
生成:
RE
--
..
私が欲しいのに対して:
RE
--
Null
正規表現を使用してこれを実現するにはどうすればよいですか?
次のことを試してください。
SELECT regexp_replace( '..', '\.{2}', 'Null' ) FROM dual;
あなたの例では^
、否定の記号(「一致しない.
」)を使用していますが、これはあなたの意図ではありません。..
代わりに、文字列の先頭でのみ一致させたい場合は、次のように使用^
します。
SELECT regexp_replace( '..', '^\.{2}', 'Null' ) FROM dual;
これは少し毛むくじゃらに見えますが、正規表現パラメーターについては次のとおりです。
(?!\.{3,})\.{2}(?<!\.{3,})
これにより、前面または背面のいずれからも、2 つ以上または 2 つ未満が互いに続くことはありません。
したがって、.. のみに一致し、... ではなく、. などではありません。
行の先頭にある 2 つのドットを探している場合、おそらく機能する可能性のある最も単純な式は次のとおりです。
SELECT REGEXP_REPLACE('..', '^\.\.', 'Null') FROM DUAL
行のどこかに 2 つのドットがある場合^
は、式の先頭にある を削除します。
行全体を構成する 2 つのドットを探している場合は、次$
のように式の最後に追加します。
'^\.\.$'
Oracle でサポートされている正規表現要素のドキュメントは、ここにあります。
共有してお楽しみください。