正規表現について教えてください。
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- その他(データベース) accessについて 2 2022/05/31 16:58
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Access(アクセス) AccessVBAで任意の複数リンクテーブルをAccessVBAを動かす際に削除したいと考えておりま 1 2022/11/17 15:45
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- PHP PHPを使って、別サイトの一部を取得して表示したいのです。。 1 2023/01/18 21:45
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのview、synonymをCOMPIL...
-
PLSQLのバインド変数の件です。
-
oracle 複数列を1列にまとめる
-
テーブル名をカラムとして取得...
-
男性と2人で飲食店に行きテーブ...
-
アクセス レコードセットを更...
-
オーダーの覚え方について
-
DBのテーブルの設計ができず困...
-
会社の飲み会の幹事になり、座...
-
一つ前に戻るには…
-
外部キーだけのテーブル(主キ...
-
処理の途中で停止させ、再開さ...
-
MACアドレス見えない
-
ACCESSで容量が50MBになった...
-
ACCESS での LEFT JOIN 時の WH...
-
テーブルにcsvファイルをインポ...
-
mysqlのフィールド名
-
ビューのソートについて
-
「テーブルに座って……」という...
-
取数計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQL、2つのテーブルで条件一致...
-
ROWNUMでUPDATEをしたいのです...
-
sqlplusで表示が変なので、出力...
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
UPDATE文
-
件数とデータを同時に取得する...
-
特定のカラムが更新されたとき...
-
OracleのSQLで同テーブルのカラ...
-
カラム位置変更
-
SQLで違うテーブルの値を比較し...
-
LONG型の先頭250バイトを Varch...
-
PLSQLのNumber型の初期化
-
数値をNUMBER型にするかCHAR型...
-
半角英数文字の抽出がしたい。
-
DELETE文とロックについて
-
SQL(oracle)でご助言いただきた...
おすすめ情報