1

続く2つのドットをNullに置き換えようとしています。

SQL> select regexp_replace('..','[^\.]+\.','Null') from dual;

生成:

RE
--
..

私が欲しいのに対して:

RE
--
Null

正規表現を使用してこれを実現するにはどうすればよいですか?

4

3 に答える 3

3

次のことを試してください。

SELECT regexp_replace( '..', '\.{2}', 'Null' ) FROM dual;

あなたの例では^、否定の記号(「一致しない.」)を使用していますが、これはあなたの意図ではありません。..代わりに、文字列の先頭でのみ一致させたい場合は、次のように使用^します。

SELECT regexp_replace( '..', '^\.{2}', 'Null' ) FROM dual;
于 2012-07-19T04:21:10.763 に答える
0

これは少し毛むくじゃらに見えますが、正規表現パラメーターについては次のとおりです。

(?!\.{3,})\.{2}(?<!\.{3,})

これにより、前面または背面のいずれからも、2 つ以上または 2 つ未満が互いに続くことはありません。

したがって、.. のみに一致し、... ではなく、. などではありません。

于 2012-07-19T04:27:31.990 に答える
0

行の先頭にある 2 つのドットを探している場合、おそらく機能する可能性のある最も単純な式は次のとおりです。

SELECT REGEXP_REPLACE('..', '^\.\.', 'Null') FROM DUAL

行のどこかに 2 つのドットがある場合^は、式の先頭にある を削除します。

行全体を構成する 2 つのドットを探している場合は、次$のように式の最後に追加します。

'^\.\.$'

Oracle でサポートされている正規表現要素のドキュメントは、ここにあります。

共有してお楽しみください。

于 2012-07-20T11:09:00.793 に答える