オラクルには多くの例外があり、さまざまなマスクがありますが、それらすべてをコーディングしますか?
現在の正規表現は次のようになります。
select regexp_replace('ORA-01400: cannot insert NULL into ("ABC_OWNER"."ABC_PART"."REGION")'
,'^ORA-\d+:\s(.+)\(.+\.\"(.+)\"\)', '\1 \2') from dual
編集:正規表現 '^ORA-\d+:\s(.+)(.+.\"(.+)\")' の説明
- "^" - 文字列の始まり
- "ORA-" - 単純な文字列 "ORA-"
- "\d+" - 一連の数字
- ":" - 単純なコロン
- "\s" - 空白
- "(.+)" - 任意の文字の中で最も長い文字列。
()
つまり、グループ (\1) としてキャプチャされます。
- "(" - 左ブラケット
- ".+" - 任意の文字の中で最も長い文字列。
- "."-単純なドット
- \" - 二重引用符
- (.+) - 任意の文字の中で最も長い文字列。そして次のグループ (\2)
- \" - 二重引用符
- )' - 右ブラケット
ポイント 6、8、および 11 の Regexp は空腹の検索になり、最初のグループから最長の文字列を見つけようとします。「6」、「8」、「11」の長さの間にいくつかのバリエーションがあるかどうかを意味します。「6」は最初に選択し、「8」は次に選択し、「11」は最小を選択します。たとえば、文字列aaaaaa
と正規表現がある場合(.+)(.+)
、最初のグループが取得aaaaa
し、2 番目のグループが取得されますa