10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


12.5.2正規表現

表12.9文字列正規表現演算子

名前 説明
不正则表达式 Regexpの否定
正则表达式 正規表現を使用したパタン一致
RLIKE Regexpのシノニムです

正規表現は,複雑な検索でパタンを指定する強力な方法です。

MySQLではPOSIX 1003.2に準拠することを目的とした亨利·斯宾塞氏による正規表現の実装が使用されます。MySQLでは,SQLステトメントで正则表达式演算子とともに実行されるパターンマッチング演算をサポートするために,拡張バージョンが使用されています。

このセクションでは,MySQLの正则表达式演算で使用できる特殊な文字や構造を例を示して要約しています。亨利·斯宾塞氏の正则表达式(7)マニュアルペジで検索できる詳細がすべて含まれているわけではありません。そのマニュアルペジは,MySQLのソス配布の正则表达式ディレクトリにあるregex.7ファ邮箱ルに含まれています。セクション3.3.4.7 "パタンマッチング"も参照してください。

正規表現演算子

  • expr不正则表达式帕特expr不是RLIKE帕特

    これは,(expr正则表达式帕特と同じです。

  • expr正则表达式帕特exprRLIKE帕特

    パタン帕特と比較して,文字列式exprのパタン一致を実行します。パタンは,拡張正規表現にすることができます。構文については、このセクションの後半で説明します。expr帕特と一致する場合は1を返し,それ以外の場合は0を返します。exprまたは帕特のいずれかがである場合は,結果もになります。RLIKEは,mSQLとの互換性を確保するために用意された正则表达式のシノニムです。

    パタンはリテラル文字列である必要はありません。たとえば,文字列式やテーブルカラムとして指定できます。

    注記

    MySQLでは文字列でCのエスケプ構文(たとえば,改行文字を表すために\ n)が使用されているため,正则表达式文字列で使用されるはすべて二重に指定する必要があります。

    正则表达式では,バeナリ文字列で使用される場合を除いて,大文字と小文字が区別されません。

    mysql >选择“蒙蒂!”REGEXP。”*”;- > 1 mysql >选择“新* \ n *线”REGEXP”新\ \ *。\ \ *线”;SELECT 'a' REGEXP 'a', 'a' REGEXP ' BINARY 'a';SELECT 'a' REGEXP '^[a-d]';- > 1

    正则表达式およびRLIKEでは,文字の型を決定する際および比較を実行する際に,引数の文字セットおよび照合順序が使用されます。引数にさまざまな文字セットまたは照合順序が含まれる場合は,セクション10.1.7.5 "式の照合順序"で説明するとおりに,型変換属性ルルが適用されます。

    警告

    正则表达式およびRLIKE演算子はバイト単位で機能するため,マルチバイトセーフではなく,マルチバイト文字セットを使用すると想定外の結果が生成される可能性があります。さらに,これらの演算子ではそのバイト値に基づいて文字が比較されるため,アクセント記号付き文字は,指定された照合順序では等しいとみなされた場合でも,等しいとして比較されない可能性があります。

正規表現の構文

正規表現では,文字列のセットが記述されます。もっとも単純な正規表現は,特殊文字を使用していないものです。たとえば,正規表現你好你好にのみ一致します。

重要な正規表現では,複数の文字列に一致できるように特定の特殊構造が使用されます。たとえば,正規表現你好|单词は,文字列你好または文字列に一致します。

さらに複雑な例として,正規表現B[一]* sは,文字列香蕉Baaaaas废话のいずれか,およびBで始まり,年代で終わり,その間に任意の数字の一个またはn文字が含まれるその他の文字列に一致します。

正则表达式演算子の正規表現では,次の特殊文字および構造のいずれかが使用される場合があります。

  • 文字列の先頭に一致します。

    mysql> SELECT 'fo\nfo' REGEXP '^fo$';SELECT ' foo ' REGEXP '^fo';- > 1
  • 文字列の末尾に一致します。

    mysql> SELECT 'fo\no' REGEXP '^fo\no$';SELECT 'fo\no' REGEXP '^fo$';- > 0
  • 任意の文字(復帰改行および改行を含む)に一致します。

    SELECT 'fofo' REGEXP '^f.*$';-> 1 mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$';- > 1
  • 一个*

    ゼロ個以上の一个文字のシケンスに一致します。

    mysql> SELECT 'Ban' REGEXP '^Ba*n';SELECT 'Baaan' REGEXP '^Ba*n';SELECT 'Bn' REGEXP '^Ba*n';- > 1
  • +

    1個以上の一个文字のシケンスに一致します。

    mysql> SELECT 'Ban' REGEXP '^Ba+n';SELECT 'Bn' REGEXP '^Ba+n';- > 0
  • 一个吗?

    ゼロまたは1個の一个文字に一致します。

    SELECT 'Bn' REGEXP '^Ba?n';SELECT 'Ban' REGEXP '^Ba?n';SELECT 'Baan' REGEXP '^Ba?n';- > 0
  • 德|美国广播公司

    シケンスまたは美国广播公司のいずれかに一致します。

    mysql> SELECT 'pi' REGEXP 'pi|apa';SELECT 'axe' REGEXP 'pi|apa';SELECT 'apa' REGEXP 'pi|apa';1 mysql> SELECT 'apa' REGEXP '^(pi|apa)$';SELECT 'pi' REGEXP '^(pi|apa)$';SELECT 'pix' REGEXP '^(pi|apa)$';- > 0
  • (abc) *

    シケンス美国广播公司のゼロ個以上の邮箱ンスタンスに一致します。

    SELECT 'pi' REGEXP '^(pi)*$';SELECT 'pip' REGEXP '^(pi)*$';SELECT 'pipi' REGEXP '^(pi)*$';- > 1
  • {1}{2,3}

    {n}または{m, n}注釈では,パタ,ンの前の原子(または部分の数多くの出現に一致する正規表現を記述するより一般的な方法が提供されます。およびnは整数です。

    • 一个*

      一个{0}と記述できます。

    • +

      {1,}と記述できます。

    • 一个吗?

      一个{0,1}と記述できます。

    より厳密に言えば,{n}は,一个の正確にn個の邮箱ンスタンスに一致します。一个{n}は,一个n個以上の邮箱ンスタンスに一致します。一个{m, n}は,一个個からn個までの邮箱ンスタンスに一致します。

    およびnは,0からRE_DUP_MAX(デフォルトは255)までの範囲内である必要があります。およびnの両方が指定されている場合は,n以下にする必要があります。

    mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';-> 0 mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';-> 1 mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';- > 1
  • (dx)[^ dx)

    一个bcd,またはXである(^が使用されている場合はそれ以外の)任意の文字に一致します。2 ecommの文字の間の-1番目の文字から2番目の文字までのすべての文字に一致する範囲が形成されます。たとえば,[0 - 9]は任意の10進数に一致します。リテラル文字を含めるには,左括弧の直後に記述する必要があります。リテラル文字-を含めるには,先頭または末尾に記述する必要があります。[]ペアの内側に定義された特殊な意味を持たない文字は,それ自体としか一致しません。

    mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]';SELECT 'aXbc' REGEXP '^[a-dXYZ]$';SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$';- > 0 mysql >选择“gheis”REGEXP”^ (^ a-dXYZ] + $ ';SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';- > 0
  • (.characters。)

    を使用して記述された)括弧式内で,その照合要素の文字シ,ケンスに一致します。字符は,単一の文字または换行符などの文字名です。次の表には,許可されている文字名を一覧表示します。

    次の表には,許可されている文字名および一致する文字を表示します。数値として指定された文字では,値が8進数で表記されます。

    名前 文字 名前 文字
    0 全音阶 001
    STX 002 ETX 003
    测试结束 004 询问 005
    006 贝尔 007
    警报 007 废话 010
    退格 “\ b” HT 011
    选项卡 ' \ t ' 低频 012
    换行符 ' \ n ' VT 013
    垂直制表符 ‘\ v’ FF 014
    换页 “\ f” CR 015
    回车 ' \ r ' 所以 016
    如果 017 DLE 020
    DC1 021 DC2 022
    DC3 023 DC4 024
    钠钾共晶合金 025 SYN 026
    ETB 027 可以 030
    新兴市场 031 032
    ESC 033 IS4 034
    FS 034 IS3 035
    GS 035 IS2 036
    RS 036 IS1 037
    我们 037 空间 ' '
    感叹号 “!” 引号 “””
    数字符号 “#” 美元符号 “美元”
    百分号 “%” & “&”
    撇号 ”\ 左括号 “(”
    右括号 “)” 星号 ‘*’
    加号 “+” 逗号 ”、“
    连字符 “- - -” hyphen-minus “- - -”
    “。” 用句号 “。”
    削减 ' / ' 固相 ' / '
    ' 0 ' 一个 ' 1 '
    两个 ' 2 ' 三个 “3”
    四个 “4” 五个 “5”
    六个 “6” 七个 “7”
    八个 “8” 九个 “9”
    结肠 “:” 分号 “;”
    小于号 “<” 等号 “=”
    大于号 “>” 问号 “?”
    商务 “@” left-square-bracket “(”
    反斜杠 “\ \” reverse-solidus “\ \”
    right-square-bracket “]” 弯曲的 “^”
    circumflex-accent “^” 下划线 “_”
    低压线路 “_” 沉音符 ’”
    左括号 “{” left-curly-bracket “{”
    垂直线 “|” 右括号 “}”
    right-curly-bracket “}” 波浪号 “~”
    177
    mysql> SELECT '~' REGEXP '[[.~.]]';-> 1 mysql> SELECT '~' REGEXP '[[.tilde.]]]';- > 1
  • (= character_class =)

    使用して記述された)括弧式内の(= character_class =)は,等価クラスを表します。これは,同じ照合順序値を持つすべての文字 (それ自体を含む) に一致します。たとえば、oおよび(+)が等価クラスのメンバである場合,[[= o =]][[= (+) =]],および(o (+))はすべてシノニムです。等価クラスは,範囲の終点として使用できない場合もあります。

  • (character_class:)

    を使用して記述された)括弧式内の(character_class:)は,そのクラスに属するすべての文字と一致する文字クラスを表します。次の表には,標準のクラス名を一覧表示します。これらの名前は,ctype (3)のマニュアルペジで定義されている文字クラスを表しています。特定のロケルでは,ほかのクラス名が提供される場合もあります。文字クラスは,範囲の終点として使用できない場合もあります。

    文字クラス名 意味
    alnum 英数文字
    α アルファベット文字
    空白 空白文字
    cntrl 制御文字
    数字 数字文字
    図形文字
    较低的 小文字アルファベット文字
    打印 図形または空白文字
    punct 句読点文字
    空间 空白,タブ,改行,および復帰改行
    大文字アルファベット文字
    xdigit 16 進数文字
    mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+';mysql> SELECT '!!'REGEXP的[[:alnum:]] +;- > 0
  • [[: <:]][[: >:]]

    これらのマカは,単語境界を表します。単語の先頭と末尾にそれぞれ一致します。単語とは,前後に単語文字が存在しない単語文字のシケンスです。単語文字とは,alnumクラス内の英数文字またはアンダスコア(_です。

    mysql >选择“一个词“正则表达式”[[:<:]][[:>:]]”;- > 1 mysql >选择“xword REGEXP的[[:<:]]词[[:>:]]';- > 0

正規表現で特殊文字のリテラルインスタンスを使用するには,前に2つのバックスラッシュ(\)文字を付けます。MySQLパーサーが2つのバックスラッシュの一方を解釈し,正規表現ライブラリがもう一方を解釈します。たとえば,特殊文字+を含む文字列1 + 2に一致する正規表現は,次のうで最後のものだけです。

REGEXP '1+2';SELECT '1+2' REGEXP '1\+2';SELECT '1+2' REGEXP '1\\+2';- > 1