2016-07-19 6 views
1

を交換しない:regex_replaceのは、私は、Oracle SQLで作業するには、次の正規表現式を取得しようとしているOracleのSQLで正しく

select regexp_replace(' "abc_78": 123, ', '.*?abc.*?: (.*?),.*', '\1') from dual; 
select regexp_replace(' "abc_78": 123, "def_79": [', '.*?abc.*?: (.*?),', '\1') from dual; 

(私は正しいと考える)"123"を返す最初の1秒1は"123 "def_79": ["を戻しつつ。

ここに問題がありますか? Oracleの悪い正規表現や機能不全?正規表現は、Sublime Textに対して試してみるとうまくいくようです。 Oracle SQL Developerからこの問合せを直接実行しています。

ありがとうございました

+0

を使用することをお勧めし:ああ、私はちょっとこの参照がで[、 –

+1

は秒を待って...くっ...来ているのを見ましたOracle正規表現* Perlに影響を受ける拡張機能*(パート1)(https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm)には、遅延量制限子を使用することは問題ありません。 2番目の入力にどのような結果が期待されますか? –

+0

私はおそらく私はここで少し離れているかもしれないと思います。私はそれらの "abc_ :123"の文字列から123を選択したかったのです。 regexp_replaceを使って正しいのですか? –

答えて

1

正しく置き換えられます。

select regexp_replace(' "abc_78": 123, "def_79": [', '.*?abc.*?: (.*?),', '\1') from dual; 

最初:It(正規表現エンジン)は、「abc_78」:123 'を見つけます。ここで123はグループ$ 1です。 123

であり、あなたのようなものを正規表現パターンにはほとんどdiffrence持っているグループ1: その後、それは123 abc_78 ':置き換えます。欠落している

'.*?abc.*?: (.*?),.*', '\1') from dual; 
'.*?abc.*?: (.*?),', '\1') from dual; 

を*第二パターンで。あなたは、この文字列から123を検索したい場合は

、WiktorStribiż[email protected]regex_substr

select regexp_substr(' "abc_78": 123, ','\d+',1,2) from dual; 
+0

はい、あなたが正しい。だから私は私の質問を少し言い換えます。私が探しているのは、その文字列の123を見つけて印刷することです。他のどのSQL関数(Oracle上であれ、それとも標準であればあれば)は、私がそれを使うべきですか? –

+0

投稿を編集しました。リフレッシュ:) –

+0

私は、もう一つだけを見ます。その最後のパラメータ、2はちょっと変わったようです。キャプチャグループを使用して123をキャプチャする方が良いでしょうか? –

関連する問題