2文字以上の区切り文字を使用して文字列を検索したいとします。REGEXP SUBSTR区切り文字は2文字以上の組み合わせです
クエリを見つけてください、私は以下試してみました:
select REGEXP_SUBSTR('[email protected][email protected]','[^[email protected]]+',1,2) from dual
必要な出力:
45$6
出力:
45
私はそれが容易に可能であることを理解使用しているユーザ定義された関数[INSTR + SUBSTRと]しかし、私はREGEXP_SUBSTRと答え&の説明を探しています。
ありがとうございます。むしろ
ような
ありがとうございました。私の理解が正しいなら助言してください。 '(。*?)':ドットは任意の文字のためのものであり、*は0以上の任意の文字の出現のためのものですが、そこに置いておくと貪欲な検索になり、文字列の終わりまですべてを取得します。したがって、 '?'は検索を非貪欲にし、区切り文字の再帰を見つける最初の点で停止することです。最後に区切られた値を得るために、特殊文字をエスケープし、最後の文字列をエスケープするというヒントをありがとう。 – pOrinG
"貪欲"対 "非貪欲"(または "怠惰")マッチングの理解はまさに正しいです。 ([^;] + 'のような)使用したいトリックを使用することはできないので、非セミコロン(または一文字の区切り文字)の途切れのない部分文字列だけを検索し、代わりに本当に'を使用する必要があります。 * 'または'。+ 'を使うと、貪欲でない検索を使わなければならない(MUST)。 '*'ではなく '+'の弱点にも注意してください。 - 2つの区切り文字がすぐ隣にある場合は、NULLを表す必要があります。 +演算子を使うと完全にそれらを逃すでしょう。 *演算子もそれらをキャッチします。 – mathguy
「+」と「*」の弱さが私を本当に驚かせました。それのために問題を経験していない限り、それについて考えなかったでしょう。感謝します。 – pOrinG