正規表現

regular-expression.png
Table of Contents
  • regex…正規表現を扱うことの出来るC++11の機能regex
  • split()…文字列を分割するときに使うJavaのsplit()引数として正規表現を使用する。
<gl.*?>(?=.*?</gl>

. 任意の文字にマッチする。
| 選択肢を区切る1
() グループ化 演算子の優先順位を決めるだけ2
? 直前の表現が0個か1個ある3ワイルドカード文字
* 直前の表現が0~何個でもある4ワイルドカード文字
+ 直前の表現が1個以上ある
[ ] 括弧内に含まれる一文字にマッチする。5
[^ ] 括弧内に含まれない一文字にマッチする。6
^ 行の最初にマッチする。 ^abcという4文字は、行頭が abc で始まるパターンを表現します
$ 行の最後にマッチする。です。$という4文字は、行末にある「です。」という3文字とマッチします。
\( \) これに囲まれた表現は、後に呼び出すことが出来る。次の \n の項を参照のこと。
\n ここで n は1から9までの数である。n 番目の \( \) で囲まれた部分にマッチする。この構文は理論的には、言うならば非正規で(正規言語の記述力を超える)、POSIX拡張正規表現では採用されていない。
\{x,y\} 直前の"ブロック"の x 回以上 y 回以下の繰り返しにマッチする。例えば、"a\{3,5\}" は aaa、aaaa、aaaaa にマッチする。

2.4 [……] (大括弧と大括弧閉じによる囲み)

 [と]の二つで囲まれたものを「クラス」とか「文字セット」といいます。囲みの中に書かれた任意の1文字にマッチします。たとえば、
  [abc]
という5文字は、 a, b, c の3文字のいずれか1文字を表現します。3文字のうちどれでもいいのですが、とにかく1文字とマッチします。また
  [0123456789]
という12文字は、 0~9 の10個の数字のうちの1文字とマッチします。もう少し例を上げると
  [abc][0123456789]
という17文字は、 a0 a1 a2 a3 とか b0 b1 b2 b3 あるいは c0 c1 c2 などの2文字とマッチします。
 ところで、該当の文字を一つづつ全て書かなければいけないとすると、ちと面倒です。これを便利に記述する方法もあります。例えば
  [0123456789]
という12文字は
  [0-9]
という5文字で表現することができます。この場合の半角の - (マイナス)は、範囲を表わす特別の文字です。
  [A-Z]
という5文字は、半角アルファベットノ大文字1文字トマッチします。また、次のような記述も可能です。
  [A-Za-z_]
これは、半角のアルファベット(大文字でも小文字でもかまわない。)と半角の _ のうち、いずれか1文字とマッチします。
  [亜-腕]
という5文字は、第1水準漢字1文字を表現します。このように文字を(アスキーコード・JISコードの順序に配慮しながら)範囲指定で表現することができます。

2.5 [^……] (大括弧・羃乗・大括弧閉じ)

 これは、クラスの否定です。指定された文字集合以外の1文字を表現します。例えば
  [^0-9]
という6文字は、「半角数字以外の任意の1文字」を表現します。アルファベットとか漢字等々半角の数字以外なら何でもいい訳ですね。もちろん
  [^abcd]
とか
  [^A-Za-z_]
などといった記述も可能です。

エスケープ文字と組み合わせても良いもの

\b \t \n \f \r \" \' \\

サポートサイト Wikidot.com