正規表現 JAVA Script 新しいページはコチラ
提供: yonewiki
(→概要) |
(→"|" パイポマーク(or検索条件)) |
||
46行: | 46行: | ||
===="?" クェスチョンマーク、クェスションマーク(直前の文字0文字か1文字)==== | ===="?" クェスチョンマーク、クェスションマーク(直前の文字0文字か1文字)==== | ||
− | ::"?" | + | ::"?" クェスチョンマーク(イクスクラメーションマーク)は直前の文字0文字か1文字に対応 |
::*ex10:'''"超超超超文字列正規表現検索Regular Expression".match(/超?文字列/)''' | ::*ex10:'''"超超超超文字列正規表現検索Regular Expression".match(/超?文字列/)''' | ||
::結果:超文字列 ※3番目の文字からのモノに一致(4文字目)し、0番目から2番目の繰り返しは無視されます。超がなくても文字列というキーワードだけでも一致は起こります。次の例に示すような感じです。 | ::結果:超文字列 ※3番目の文字からのモノに一致(4文字目)し、0番目から2番目の繰り返しは無視されます。超がなくても文字列というキーワードだけでも一致は起こります。次の例に示すような感じです。 | ||
::*ex11:'''"文字列正規表現検索Regular Expression".match(/超?文字列/)''' | ::*ex11:'''"文字列正規表現検索Regular Expression".match(/超?文字列/)''' | ||
::結果:文字列 ※0番目の文字からのモノに一致し、超がなくても文字列というキーワードだけでも一致は起こります。 | ::結果:文字列 ※0番目の文字からのモノに一致し、超がなくても文字列というキーワードだけでも一致は起こります。 | ||
+ | |||
+ | ===="*?","+?","??", */+/?直後のクェスションマーク(最小マッチング)==== | ||
+ | ::理解しづらい表現の一つになりますが、上記までに指定した記号による、繰り返し文字マッチングはここで紹介する方法を利用しない限りは最長のマッチングを優先します。ex9では超+文字列という検索にたいしては、超超超超文字列という結果になっていましたが、超+?文字列だと最小の1文字でのマッチが優先され、3番目の文字でのモノに一致し、超文字列という結果になります。ex10では、?は0文字か1文字に一致しますが、最小なので、一致したとしても0文字が優先され、超文字列という結果ではなく、※4番目の文字からのモノに一致し、文字列という結果になります。英語ではlazyとかnon-greedyといわれていることから、それに対応する日本語として、ものぐさマッチングと呼ばれます。 | ||
75行: | 78行: | ||
===="[^ ~ ]" 大カッコ、ブラケットマーク+ハットマーク(羅列検索条件否定)==== | ===="[^ ~ ]" 大カッコ、ブラケットマーク+ハットマーク(羅列検索条件否定)==== | ||
− | ::"[^ ~ ]" カッコに囲まれた文字以外 | + | ::"[^ ~ ]" カッコに囲まれた文字以外 ^はキャレットとも言います。 |
::例えば、A~Zあるいは、文,字,列,正,規,表,現,検,索,のいずれかの文字以外はあるか?という検索は | ::例えば、A~Zあるいは、文,字,列,正,規,表,現,検,索,のいずれかの文字以外はあるか?という検索は | ||
::*ex15:'''"文字列正規表現検索Regular Expression".match(/[^A-Z文字列正規表現検索]/)''' | ::*ex15:'''"文字列正規表現検索Regular Expression".match(/[^A-Z文字列正規表現検索]/)''' | ||
84行: | 87行: | ||
::[々〇〻\u3400-\u9FFF\uF900-\uFAFF]→々,〇,〻,\u3400-\u9FFF,\uF900-\uFAFF \uXXXXはユニコード文字番号16進数指定です。 | ::[々〇〻\u3400-\u9FFF\uF900-\uFAFF]→々,〇,〻,\u3400-\u9FFF,\uF900-\uFAFF \uXXXXはユニコード文字番号16進数指定です。 | ||
::[\uD840-\uD87F][\uDC00-\uDFFF]→ユニコードのサロゲートペアと呼ばれる範囲の4バイト文字範囲です。 | ::[\uD840-\uD87F][\uDC00-\uDFFF]→ユニコードのサロゲートペアと呼ばれる範囲の4バイト文字範囲です。 | ||
− | :: | + | ::説明の意味が分からない人は[[Unicode|ユニコード]]の記事で確認してみて下さい。 |
− | + | ||
===="|" パイポマーク(or検索条件)==== | ===="|" パイポマーク(or検索条件)==== | ||
− | ::"|" | + | ::"|" パイポ(パイプ)マークは、記述したうちのどれか?という意味になります。既に一つ前のややこしい議論の結果として使ってしまっています。前述のように文字コード範囲を複数記述する方法としても使えますし、検索文字列を複数記述する手法として"/ ~ /"の中で使えます。 |
::ex17.'''"文字列正規表現検索Regular Expression".match(/Regular|Expression/)''' | ::ex17.'''"文字列正規表現検索Regular Expression".match(/Regular|Expression/)''' | ||
::結果:Regular ※9番目の文字のモノです。RegularかExpressionのどちらかという意味になります。先に登場するRegularに一致します。 | ::結果:Regular ※9番目の文字のモノです。RegularかExpressionのどちらかという意味になります。先に登場するRegularに一致します。 | ||
− | |||
===="{}" 中カッコ、ブレースマーク(直前の文字の繰り返し数指定)==== | ===="{}" 中カッコ、ブレースマーク(直前の文字の繰り返し数指定)==== | ||
113行: | 114行: | ||
::ex20(2).'''"文字列正規表現検索Regular Expression".match(/超{0,}文字列/)''' | ::ex20(2).'''"文字列正規表現検索Regular Expression".match(/超{0,}文字列/)''' | ||
::結果:文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 | ::結果:文字列 ※0番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 | ||
+ | |||
+ | |||
+ | ::上限のある場合で10回以内の繰り返しに一致するには以下のように",10"とします。以下の例でも超が11以上あっても10を限度とした一致をする結果が得られます。 | ||
+ | ::ex20(3).'''"超超超超文字列正規表現検索Regular Expression".match(/超{,2}文字列/)''' | ||
+ | ::結果:文字列 ※3番目の文字からのモノに一致し、検索した文字列と一致したという結果になります。 | ||
====/^ ~ /(先頭文字指定)==== | ====/^ ~ /(先頭文字指定)==== | ||
130行: | 136行: | ||
====/ ~\b/(スペース区切りアリ指定)==== | ====/ ~\b/(スペース区切りアリ指定)==== | ||
::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、検索文字に続けて\bとついているような場合は文字列先頭あるいは末尾ありは半角スペースで区切られたキーワードであることが検索の条件に加わります。\bは区切りアリ。対して\Bはスペース区切り無しと大文字の場合は区切り条件を否定する意味になります。このような対応の検索オプションはいくつかありますが、基本的に大文字と小文字で相反する意味として対応づけられています。 | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、検索文字に続けて\bとついているような場合は文字列先頭あるいは末尾ありは半角スペースで区切られたキーワードであることが検索の条件に加わります。\bは区切りアリ。対して\Bはスペース区切り無しと大文字の場合は区切り条件を否定する意味になります。このような対応の検索オプションはいくつかありますが、基本的に大文字と小文字で相反する意味として対応づけられています。 | ||
+ | ::*ex25:'''"文字列正規表現検索(RegularExpression) Regular Expression 文字列".match(/Expression\b/)''' | ||
+ | ::結果:文字列 ※37番目の文字でのモノに一致し、検索の一致があったという結果になります。一致の結果の意味が17番目にあるExpressionではないことに注意が必要です。 | ||
+ | |||
+ | |||
+ | ====/ ~\B/(スペース区切りナシ指定)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、検索文字に続けて\Bとついているような場合は文字列先頭あるいは末尾にあって、かつ半角スペースでは区切られていないキーワードであることが検索の条件に加わります。 | ||
+ | ::*ex26:'''"文字列正規表現検索(RegularExpression) Regular Expression 文字列".match(/Expression\B/)''' | ||
+ | ::結果:文字列 ※17番目の文字でのモノに一致し、検索の一致があったという結果になります。一致の結果の意味が37番目にあるExpressionではないことに注意が必要です。 | ||
+ | |||
+ | |||
+ | ====/\d/(ディジット、数字検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\dは[0-9]と同じことになります。 | ||
+ | ::*ex27:'''"文字列正規表現検索Regular Expression2".match(/\d/)''' | ||
+ | ::結果:2 ※27番目の文字でのモノに一致し、検索の一致があったという結果になります。 | ||
+ | |||
+ | |||
+ | ====/\D/(ディジット、数字以外検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\Dは[^0-9]と同じことになります。 | ||
+ | ::*ex28:'''"2016文字列正規表現検索Regular Expression2".match(/\D/)''' | ||
+ | ::結果:文 ※4番目の文字でのモノに一致し、検索の一致があったという結果になります。初めて登場する数字以外の文字に一致しています。 | ||
+ | |||
+ | |||
+ | ====/\w/(ワード、アルファベット/_/数字検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\wは[a-zA-Z_0-9]と同じことになります。 | ||
+ | ::*ex27:'''"文字列正規表現検索Regular Expression2".match(/\d/)''' | ||
+ | ::結果:R ※9番目の文字でのモノに一致し、検索の一致があったという結果になります。 | ||
+ | |||
+ | |||
+ | ====/\W/(ワード、アルファベット/_/数字以外検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\Wは[^a-zA-Z_0-9]と同じことになります。 | ||
+ | ::*ex28:'''"2016文字列正規表現検索Regular Expression2".match(/\D/)''' | ||
+ | ::結果:文 ※4番目の文字でのモノに一致し、検索の一致があったという結果になります。初めて登場するアルファベット/_/数字以外の文字に一致しています。 | ||
+ | |||
+ | |||
+ | |||
+ | ====/\s/(スペース、空白文字、制御文字検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\sは[ \u0000-\u001F\u00FF]と同じことになります。 | ||
+ | ::*ex27:'''"文字列正規表現検索Regular Expression2".match(/\s/)''' | ||
+ | ::結果:" "(半角スペース) ※16番目の文字でのモノに一致し、検索の一致があったという結果になります。 | ||
+ | |||
+ | |||
+ | ====/\S/(スペース、空白文字、制御文字以外検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、\Sは[^ \u0000-\u001F\u00FF]と同じことになります。 | ||
+ | ::*ex28:'''"2016文字列正規表現検索Regular Expression2".match(/\S/)''' | ||
+ | ::結果:文 ※0番目の文字でのモノに一致し、検索の一致があったという結果になります。初めて登場する空白、制御文字以外の文字に一致しています。 | ||
+ | |||
+ | |||
+ | ====/ ~ /i (大文字小文字を区別しない検索)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、/ ~ /i のように記述すると大文字と小文字を区別しない検索になります。 | ||
+ | ::*ex29:'''"2016文字列正規表現検索Regular Expression2".match(/regular/i)''' | ||
+ | ::結果:Regular ※13番目の文字でのモノに一致し、検索の一致があったという結果になります。 | ||
+ | |||
+ | |||
+ | ====/ ~ /g (すべてを検索、グローバルマッチ)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、/ ~ /g のように記述すると検索対象文字列全体のすべてで検索し、先頭の検索結果が見つかっても、それ以降に登場する検索についても、すべて実施します。検索結果は複数の検索結果が返却されることもあるため、配列要素になって返却されます。 | ||
+ | ::*ex29:'''"2016文字列正規表現検索Regular Expression1,Regular Expression2".match(/Regular/g)''' | ||
+ | ::結果:Regular ※13番目の文字でのモノと33番目の文字でのモノと一致し、検索の一致があったという結果になります。 | ||
+ | |||
+ | |||
+ | ====/(*)~/ (パターンマッチ 10個まで)==== | ||
+ | ::/ ~ / のように"/"で囲まれた部分に書いた文字が検索文字になりますが、/(*)~/ のようにカッコ(パーレンスィスとかパーレンとも言います。)を利用すると、()に相当する部分をパターンとして記憶するような動作が起こります。具体的には例を見た方がわかりやすいと思います。 | ||
+ | ::*ex30:'''"超超超超超文字列正規表現検索Regular Expression1,Regular Expression2".match(/(*)文字列(*)/)''' | ||
+ | ::結果:超超超超文字列 ※0番目の文字でのモノと33番目の文字でのモノと一致し、検索の一致があったという結果になります。これだけだと通常の検索と何も変わらないように思えますが、$1という変数のような記号に対して最初の()内で一致したパターンの文字が格納されます。 | ||
+ | ::$1 = 超超超超超 | ||
+ | ::$2 = 正規表現検索Regular Expression1,Regular Expression2 | ||
+ | ::という具合に2つ目以降のパターンも同様にして格納されます。 | ||
+ | |||
<yjavascript> | <yjavascript> | ||
document.write("文字列正規表現検索\r\nRegular Expression".match(/^Regular/), "</BR>"); | document.write("文字列正規表現検索\r\nRegular Expression".match(/^Regular/), "</BR>"); | ||
</yjavascript> | </yjavascript> |