Regexツール |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
一般的なアプリケーション |
EditPad Lite |
EditPad Pro |
言語とライブラリ |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery & XPath |
XRegExp |
データベース |
MySQL |
Oracle |
PostgreSQL |
このサイトのその他の情報 |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能なPDF |
このサイトについて |
RSSフィードとブログ |
バージョン10gリリース1以降、Oracle Databaseでは、SQLおよびPL/SQLステートメントで使用できる4つのregexp関数が提供されています。これらの関数は、POSIX拡張正規表現(ERE)標準を実装しています。Oracleは、ブラケット式における照合シーケンスと等価クラスを完全にサポートしています。NLS_SORT設定により、使用されるPOSIXロケールが決定され、利用可能な照合シーケンスと等価クラスが決定されます。
ただし、OracleはPOSIX ERE標準を正確に実装しているわけではありません。3つの領域で逸脱しています。まず、Oracleは正規表現で後方参照をサポートしています。\1次のように\9。POSIX ERE標準は、POSIX BREであっても、これらをサポートしていません。完全に準拠したエンジンでは、\1次のように\9は不正となります。POSIX標準では、メタキャラクタではない文字をバックスラッシュでエスケープすることは不正であると規定されています。Oracleではこれが許可されており、バックスラッシュは単に無視されます。例:\qは、qとOracleでは同じ意味になります。結果として、すべてのPOSIX ERE正規表現をOracleで使用できますが、Oracleで動作する一部の正規表現は、完全にPOSIX準拠のエンジンではエラーを引き起こす可能性があります。当然ながら、Oracleのみを使用する場合、これらの違いは無関係です。
3つ目の違いは、より微妙です。エラーは発生しませんが、異なる一致結果になる可能性があります。POSIX標準に関するトピックで説明したように、正規表現エンジンは選択肢の場合、最長の一致を返す必要があります。Oracleのエンジンはこれを行いません。このWebサイトで説明したすべての非POSIX正規表現フレーバーと同様に、従来のNFAエンジンです。
他のプログラミング言語で正規表現を使用したことがある場合、POSIXでは、\t(タブ用)や\n(改行用)のような印刷不可能な文字のエスケープはサポートされていないことに注意してください。C++などのプログラミング言語のPOSIXエンジンではこれらを使用できます。これは、C++コンパイラが文字列定数で\tと\nを解釈するためです。SQLステートメントでは、正規表現でタブや改行に一致させるために、文字列に実際のタブや改行を入力する必要があります。Oracleの正規表現エンジンは、'\t'という文字列を正規表現パラメータとして渡した場合、tとして解釈します。
Oracle 10g R2では、フリースペーシングモード(コメントのサポートなし)、省略形文字クラス、遅延量指定子、およびアンカー\A, \Z、および\zを追加することで、正規表現構文をさらに拡張しています。Oracle 11gと12cでは、10g R2と同じ正規表現フレーバーを使用します。
Oracle Database 10gは、4つの正規表現関数を提供します。これらはSQLおよびPL/SQLステートメントで同様に使用できます。
REGEXP_LIKE(source, regexp, modes)はおそらく最も頻繁に使用する関数でしょう。SELECTステートメントのWHERE句とHAVING句で使用できます。PL/SQLスクリプトでは、ブール値を返します。CHECK制約でも使用できます。sourceパラメータは、正規表現が照合される文字列または列です。regexpパラメータは、正規表現を含む文字列です。modesパラメータはオプションです。マッチングモードを設定します。
SELECT * FROM mytable WHERE REGEXP_LIKE(mycolumn, 'regexp', 'i');
IF REGEXP_LIKE('subject', 'regexp') THEN /* Match */ ELSE /* No match */ END IF;
ALTER TABLE mytable ADD (CONSTRAINT mycolumn_regexp CHECK (REGEXP_LIKE(mycolumn, '^regexp$')));
REGEXP_SUBSTR(source, regexp, position, occurrence, modes)は、正規表現によってsourceで一致した文字列を返します。一致が失敗した場合、NULLが返されます。REGEXP_SUBSTRは、単一の文字列または列で使用できます。SELECT句で使用して、列の特定の部分のみを取得できます。positionパラメータは、ソース文字列内の一致試行を開始する文字位置を指定します。最初の文字の位置は1です。occurrenceパラメータは、取得する一致を指定します。最初の一致を取得するには1に設定します。より高い数値を指定した場合、Oracleは、指定した数だけ一致が見つかるまで、前回の一致の終了位置から正規表現の一致を試み続けます。最後の一致が返されます。一致がそれよりも少ない場合は、NULLが返されます。このパラメータを後方参照と混同しないでください。Oracleは、キャプチャグループによって一致した文字列の一部を返す関数を提供していません。最後の3つのパラメータはオプションです。
SELECT REGEXP_SUBSTR(mycolumn, 'regexp') FROM mytable;
match := REGEXP_SUBSTR('subject', 'regexp', 1, 1, 'i')
REGEXP_REPLACE(source, regexp, replacement, position, occurrence, modes)は、1つまたはすべての正規表現の一致が置換されたソース文字列を返します。一致が見つからない場合、元の文字列が返されます。occurrence(上記の段落を参照)に正の数を指定すると、その一致のみが置換されます。ゼロを指定するか、パラメータを省略すると、すべての一致が置換されます。最後の3つのパラメータはオプションです。replacementパラメータは、各正規表現の一致を置き換える文字列です。置換テキストで後方参照を使用して、キャプチャグループによって一致したテキストを再挿入できます。同じグループを複数回参照できます。正規表現全体の一致を再挿入するための置換テキストトークンはありません。これを行うには、正規表現全体を括弧で囲み、置換で\1次のように\9を使用します。をリテラルで挿入する場合は、\1を使用します。リテラルで挿入する場合は、\1という文字列を使用します。バックスラッシュは、数字または別のバックスラッシュが続く場合にのみエスケープする必要があります。を挿入するには、'\\1'を使用します。SQLでは文字列でバックスラッシュをエスケープする必要はありませんが、REGEXP_REPLACE関数ではエスケープする必要があります。\\という文字列を使用します。バックスラッシュは、数字または別のバックスラッシュが続く場合にのみエスケープする必要があります。を挿入するには、'\\\\'を使用します。SQLでは文字列でバックスラッシュをエスケープする必要はありませんが、REGEXP_REPLACE関数ではエスケープする必要があります。
SELECT REGEXP_REPLACE(mycolumn, 'regexp', 'replacement') FROM mytable;
result := REGEXP_REPLACE('subject', 'regexp', 'replacement', 1, 0, 'i');
REGEXP_INSTR(source, regexp, position, occurrence, return_option, modes)は、ソース文字列内の正規表現一致の開始位置または終了位置を返します。この関数は、REGEXP_SUBSTRと同じパラメータに加えて、もう1つのパラメータを受け取ります。return_optionをゼロに設定するか、パラメータを省略すると、一致の最初の文字の位置が取得されます。一致後の最初の文字の位置を取得するには、1に設定します。文字列の最初の文字の位置は1です。一致が見つからない場合、REGEXP_INSTRはゼロを返します。最後の4つのパラメータはオプションです。
SELECT REGEXP_INSTR(mycolumn, 'regexp', 1, 1, 0, 'i') FROM mytable;
REGEXP_COUNT(source, regexp, position, modes)は、ソース文字列内で正規表現が一致する回数を返します。正規表現が一致をまったく見つけられない場合はゼロを返します。この関数はOracle 11g以降でのみ利用可能です。
SELECT REGEXP_COUNT(mycolumn, 'regexp', 1, 'i') FROM mytable;
4つのregexp関数のそれぞれが受け入れるmodesパラメータは、4つの可能な文字から最大3文字の文字列である必要があります。例:'i'は、大文字と小文字を区別しないマッチングをオンにし、'inm'は、これら3つのオプションをオンにします。'i'と'c'は相互に排他的です。このパラメータを省略するか、空の文字列を渡すと、デフォルトのマッチングモードが使用されます。
O’Reillyの書籍「Oracle Regular Expressions Pocket Reference」は、Oracle Database 10gの正規表現について知っておくべきことをすべて教えてくれる、非常に便利な64ページのボリュームです。書籍の表紙とは異なり、実際にはチュートリアルとリファレンスの両方が含まれています。Oracleの正規表現サポートはかなり限定されているため、この小さな本はOracleで正規表現を正常に使用するために必要なすべてです。
書籍「Oracle Regular Expressions Pocket Reference」の私のレビュー
| クイック スタート | チュートリアル | ツール & 言語 | 例 | リファレンス | 書籍 レビュー |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
ページURL: https://regular-expressions.dokyumento.jp/oracle.html
ページの最終更新日: 2021年8月24日
サイトの最終更新日: 2024年3月15日
Copyright © 2003-2024 Jan Goyvaerts. All rights reserved.