2016-04-26 22 views
1

オンラインRegex Tester(https://regex101.com/)を使用してテストするときにリストされた文字列と一致する次の式があります。REGEXP_LIKEによって返された行がありません

式:

^(?:[A-Z]{3}[0-9]{3}[a-z]{1}\([0-9]{1,3}\-[0-9]{1,3}\))\+\s?(?:[A-Z]{2}\((?:[0-9]{1,3}((?:\-[0-9]{1,3}(?:\s?\,\s?)?))?)+\)(?:\s?\+\s?)?)*$ 

列入力:

ATL107j(1-132)+XD(133-156)+SP(157-288)+XD(289-432)

私が使用している場合:

SELECT 1 FROM DUAL WHERE REGEXP_LIKE([String Input], [Expression])

私は行を取得しません。私はそれがREGEXP_LIKEに関連するので、何が間違っているか分かりません。私はOracle 11gR2を使用しています。

何か助けていただければ幸いです。ありがとうございました。

+1

私がテストサイトの入力で式を試したとき、私はマッチを得ませんでした。あなたは何かを見逃しましたか? – cableload

+1

上記と同じ...一致しません! – Max

+1

ごめんなさい。間違った式をコピーしました。テストサイトのこの文字列入力で正しく動作するはずです。 ^(?:[AZ] {3} [0-9] {3} [az] {1} \([0-9] {1,3} \ - [0-9] { (?:[0-9] {1,3}((?:\ - [0-9] {1、1,3})) (?:\ s?\ + \ s?)?)* $ – anteater

答えて

1

(?: ...)のように、かっこの後に?:と表示されますか?それは正規表現のOracleの味ではありません。すべての?:ペアを削除すると、クエリは1つの行を返します。オラクルでは、?:は文字通り取られます。

SQL> select 1 from dual where regexp_like('?:', '(?:)'); 

     1 
---------- 
     1 
1 row selected. 

Oracleではサポートされていない別のフレーバの正規表現機能を使用する必要があります。

+0

ありがとうmathguy。同じことがわかりました。 。 – anteater

+0

実際には、Oracleはキャプチャ・グループをサポートしていますが、構文が異なるだけです。* $ '、1、1、null、2)from dual; '第2のキャプチャグループ' 02 'を返します(regexpのドキュメントを参照してください;最後の引数2は、返されるキャプチャグループを示します)。 – mathguy

+0

ああ!すごい、もう一度ありがとう! – anteater

関連する問題