2013-04-18 20 views
14

場合によっては、ストリング開始アンカーの数がストリング終了アンカーの数と等しくないのはなぜですか?

regexp_count(chr(10)||'A'||chr(10)||'B', '^') = 2 
regexp_count(chr(10)||'A'||chr(10)||'B', '$') = 1 

UPD:
マルチラインモードの不均衡に反対の方向を有する:

regexp_count(chr(10)||'A'||chr(10)||'B', '^', 1, 'mn') = 1 
regexp_count(chr(10)||'A'||chr(10)||'B', '$', 1, 'mn') = 3 

fiddle

+2

はバグのように見えます。 'chr(10)'の後ろには '^ ^'と一致するものがあります。これは単線モードではナンセンスです – zerkms

+0

wow。このバグのオラクルの他に、regexpエンジンでラインフィードとしてchr(10)を数えていない場合(最初のchr(10)の前に '' C '||'を追加してみてください)、結果は^と$の両方で1になります) – Sebas

+2

さらに興味深い:http://www.sqlfiddle.com/#!4/d41d8/9942 – ThinkJet

答えて

12

調査Oracleサポートは、この問題はバグであると結論した後。

バグ16707134:REGEXP_COUNTパターン '^' AND NEW LINE予期しない動作

+0

私の別の[質問](http://stackoverflow.com/q/16702672/1847592)で同様の問題を解決するためにOracleサポートにお問い合わせください。 –

+0

@EgorSkriptunoff申し訳ありませんが、今はMetalinkへのアクセス権がありません。しかし、Oracleのコミュニティ・フォーラムhttps://forums.oracle.com/forums/category.jspa?categoryID=18でこの質問をすることができます。このフォーラムはOracleサポート・スペシャリストによって監視されているようで、権限のある回答を得るには便利な場所のようです。 – ThinkJet

+0

@ThinkJet V $ NLS_PARAMETERSに対してchr(10)をチェックしましたか? –