次のような文字列があります
{ABCDE}{F1}
{GHIJ}{K12}
最初の中括弧の間のテキストを抽出したい
ABCDE
GHIJ
オンラインで検索してみましたが、関数またはPL-SQLを使用しているようです。誰かがこれを手伝ってくれませんか?
ここではREGEXP_SUBSTR
を使用できます。
SELECT regexp_substr('{ABCDE}{F1}', '\{([^}]+)\}', 1,1,NULL,1) AS output
FROM dual
これは、このパターンに従って、キャプチャグループを使用するREGEXP_SUBSTR
のあまり一般的ではない使用法です。
\{([^}]+)\}
6番目のパラメーターは、最初のキャプチャグループを返すことを示しています。
これは古いskoolです。私は正規表現が大好きで、それらを理解することができますが、それらを作成しようとすると、非常に多くのトラブルに遭遇します。スペイン語に少し似ています(私にとって)。したがって、これはSQL INSTR/SUBSTR/REPLACEです。私は賛成票を期待していません...
WITH test_data (raw_text)
AS
(SELECT '{ABCDE}{F1}' from dual UNION ALL
SELECT '{GHIJ}{K12}' from dual
)
SELECT
raw_text
,SUBSTR(raw_text,2,INSTR(raw_text,'}{')-2) first_string
,REPLACE(SUBSTR(raw_text,INSTR(raw_text,'}{')+2),'}') second_string
--these two from Tim's excellent answer
,regexp_substr(raw_text, '\{([^}]+)\}', 1,1,NULL,1)
,regexp_substr(raw_text, '\{([^}]+)\}', 1,2,NULL,1)
FROM
test_data
;
あなたは次のようなことを試すかもしれません:
SELECT TRIM( '{' FROM REGEXP_SUBSTR(mystring, '\{[^}]+') )
FROM mytable;
これにより、最初の開始中括弧から終了中括弧までのテキストがキャプチャされ、結果から開始中括弧がトリミングされます。
お役に立てれば。