- 締切済み
正規表現について教えてください。
正規表現について教えてください。 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の正規表現は[^<:→]+[^<:→]+[^<:→]+ で試してみたのですが、 うまく出来ませんでした・・・。 テーブルの線の調整がうまくできず、 表が見づらくて申し訳ありませんが、 正規表現に詳しい方、ご教示をよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- sholmes
- ベストアンサー率81% (89/109)
Oracleは全然わからないのですが、個人的にデータベースの正規表現がどこまで利用可能なのか気になったので参戦させてください。 まず、Oracle11gだと仮定して 次の二つのページの機能が使える事を前提にしました。 10gだとsubexprが使えないようなので、別の解法が必要になると思います。 http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/functions150.htm http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/ap_posix003.htm#CHDIHFJA また、マッチ条件を次のように決めつけました。 「SENTENCE」カラムの最後に入っている<foo:bar>のfoo部分。 「SENTENCE」カラムの末尾には必ず<foo:bar>が入り、その後よけいな文字列はつかない そうすると、ID1~3まで全て次のような条件でいけそうな気がします。('i'は他のでも構わないと思います。) REGEXP_SUBSTR(SENTENCE, '^.*<(.+?):.+?>$', 1, 1, 'i', 1) さすがにもっとちゃんとした正規表現・解法がありそうな気もするんですが・・・ もし簡単に試せる環境なのであれば、取り敢えず動いたかどうかフィードバックして頂けると嬉しいです。 (他の方々からもっとちゃんとした回答がついたら、この書き込みは無視しちゃってください)
お礼
早速のご返事ありがとうございます。 職場にしか開発環境がないことと、職場では本サイトを閲覧できないので 返事が遅くなってしまいましたが、今朝、試してみたところ、 「右カッコがありません」や、時々、「無効な識別子です」といったエラーメッセージが 出て失敗しました・・・。 手帳に書き写したので、私の記載ミスだったかもしれませんが、 まずは、結果報告までに。 明日の朝、もう一度確認しますが、 今後も解決策を提示していただけると嬉しいです。