
正規表現について教えてください。
Oracleで開発を行っている者ですが、ネットや本で調べても
わからない箇所がありましたので、ここに質問として挙げさせていただきます。
ご教示いただけると幸いです。
現在、下記のようなデータが入ったテーブルがあります。
----------------------------------------------------------------------------------
ID | SENTENCE | REG_EXP
----------------------------------------------------------------------------------
1 | <○○○:XXXX> | [^<][^:]+
----------------------------------------------------------------------------------
2 | <○○○:XXXX>→<△△△:XXXX> |
----------------------------------------------------------------------------------
3 | ■■■■■<○○○:XXXX> |
----------------------------------------------------------------------------------
このテーブルを使って、アプリを作っているのですが、
期待動作としては、SENTENCEの列に入っている文字列を
REG_EXPの列に入っているデータ(正規表現のパターン)で
マッチした文字列を切り取るようにしたいのです。
例えば、IDが1の場合は○○○が切り取られるのが期待動作です。
(注.この動作は、REGEXP_SUBSTR関数を用いてSQLで実行します。)
お聞きしたいのは、IDが2の場合は△△△を、IDが3の場合は○○○を、
配列の最初の要素に入れるには、正規表現をどのように記載すればよいのか、ということです。
○、△、■、Xの部分は英数字、日本語のどれが入るのかはわかりませんが、
<や→、:などの全角記号のフォーマットはこのままになります。。
IDが2の正規表現は[^<:→]+[^<:→]+[^<:→]+ で試してみたのですが、
うまく出来ませんでした・・・。
テーブルの線の調整がうまくできず、
表が見づらくて申し訳ありませんが、
正規表現に詳しい方、ご教示をよろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
Oracleは全然わからないのですが、個人的にデータベースの正規表現がどこまで利用可能なのか気になったので参戦させてください。
まず、Oracle11gだと仮定して
次の二つのページの機能が使える事を前提にしました。
10gだとsubexprが使えないようなので、別の解法が必要になると思います。
http://download.oracle.com/docs/cd/E16338_01/ser …
http://download.oracle.com/docs/cd/E16338_01/ser …
また、マッチ条件を次のように決めつけました。
「SENTENCE」カラムの最後に入っている<foo:bar>のfoo部分。
「SENTENCE」カラムの末尾には必ず<foo:bar>が入り、その後よけいな文字列はつかない
そうすると、ID1~3まで全て次のような条件でいけそうな気がします。('i'は他のでも構わないと思います。)
REGEXP_SUBSTR(SENTENCE, '^.*<(.+?):.+?>$', 1, 1, 'i', 1)
さすがにもっとちゃんとした正規表現・解法がありそうな気もするんですが・・・
もし簡単に試せる環境なのであれば、取り敢えず動いたかどうかフィードバックして頂けると嬉しいです。
(他の方々からもっとちゃんとした回答がついたら、この書き込みは無視しちゃってください)
早速のご返事ありがとうございます。
職場にしか開発環境がないことと、職場では本サイトを閲覧できないので
返事が遅くなってしまいましたが、今朝、試してみたところ、
「右カッコがありません」や、時々、「無効な識別子です」といったエラーメッセージが
出て失敗しました・・・。
手帳に書き写したので、私の記載ミスだったかもしれませんが、
まずは、結果報告までに。
明日の朝、もう一度確認しますが、
今後も解決策を提示していただけると嬉しいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL*LoaderでCSVから指定した列...
-
SQL、2つのテーブルで条件一致...
-
件数とデータを同時に取得する...
-
UPDATE文
-
テーブル名をカラムとして取得...
-
sqlplusで表示が変なので、出力...
-
oracleのエラー(ORA-00932)の...
-
SQL(oracle)でご助言いただきた...
-
DBからタブ区切りのCSVデータを...
-
update文で改行を入れる
-
execute immediate内の"'"
-
ROWNUMでUPDATEをしたいのです...
-
oracle 複数列を1列にまとめる
-
OracleのSQLで同テーブルのカラ...
-
LONG型の先頭250バイトを Varch...
-
DELETE文とロックについて
-
SQL文のCOUNTの戻り値は?
-
日付の古い順番に削除したいの...
-
Oracle(オラクル)で、日付時刻...
-
「テーブルに座って……」という...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
SQL、2つのテーブルで条件一致...
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
-
sqlplusで表示が変なので、出力...
-
ROWNUMでUPDATEをしたいのです...
-
SQL(oracle)でご助言いただきた...
-
カラム位置変更
-
件数とデータを同時に取得する...
-
OracleのSQLで同テーブルのカラ...
-
LONG型の先頭250バイトを Varch...
-
数値をNUMBER型にするかCHAR型...
-
特定のカラムが更新されたとき...
-
半角英数文字の抽出がしたい。
-
DBからタブ区切りのCSVデータを...
-
sqlで質問です。 aテーブルとb...
-
SQLについて教えて下さい。 主...
-
Oracleのview、synonymをCOMPIL...
おすすめ情報