0

「TICKER: IBM IBM Corporation Inc.」という文字列があります。ティッカーとその値を削除し、Oracle PL/SQL に残っているものだけを取得したいと考えています。

だから私はこのクエリを作成しましたが、意図したとおりに機能していません:

SELECT REGEXP_REPLACE(
           'TICKER: IBM IBM Corporation Inc.',
           '(.*):[[:space:]](.*)[[:space:]](.*)', '\3')
      FROM dual;

「\3」が「IBM Corporation Inc.」になることを期待していました。しかし、私は「株式会社」だけを取得します。結果として。

REGEXP_REPLACE('TICKER:IBMIBMCORPORATIONINC.','(.*):[[:SPACE:]](.*)[[:SPACE:]](.*)','\3') 
----------------------------------------------------------------------------- 
Inc.                                                                                      

1 rows selected

アップデート:

SELECT REGEXP_REPLACE(
       'TICKER: IBM IBM Corporation Inc.',
       '(.*):[[:space:]](.*)[[:space:]](.*)', '\1|\2|\3')
  FROM dual;

結果:

REGEXP_REPLACE('TICKER:IBMIBMCORPORATIONINC.','(.*):[[:SPACE:]](.*)[[:SPACE:]](.*)','\1|\2|\3') 
-------------------------------------------------------------------------------- 
TICKER|IBM IBM Corporation|Inc.

正規表現で何が欠けていますか?

ありがとう。

4

2 に答える 2

1
SELECT REGEXP_REPLACE(
           'TICKER: IBM IBM Corporation Inc.',
           '^(.*?):\s(\S*)\s(.*)$',
           '\3'
       )
FROM DUAL;

または、コードを機能させるために多くの変更を加える必要はありません (文字列の先頭に固定し、最初の 2 つのワイルドカード マッチを非貪欲に変換します)。

SELECT REGEXP_REPLACE(
           'TICKER: IBM IBM: Corporation Inc.',
           '^(.*?):[[:space:]](.*?)[[:space:]](.*)',
           '\3'
        )
FROM DUAL;
于 2016-05-05T19:00:41.233 に答える