正規表現
正規表現とは
文字列の一部をパターン化することで、特定の条件を満たす文字列を表現する表記方法です.
基本演算子
.
任意の文字列の一文字とマッチします.
*
演算子の直前に置かれている部分正規表現の、可能な限り大きい繰り返しにマッチします.0回の繰り返し(一個もない)にもマッチします.例えば、 ab* は、abにもabbにも、a ( b が一個もない)にもマッチします.
+
直前にある部分正規表現の一回以上の繰り返しにマッチします.例えば、ab+ は、ab や abbb にはマッチしますが、* と違って a とはマッチしません.
?
直前にある部分正規表現、もしくは空文字列にマッチします.例えば、ab? は、 ab もしくは a にマッチします.
|
演算子の左右に置かれた部分正規表現のいずれかにマッチします.例えば、a|b は、 a もしくは b にマッチします.
[ ]
[ ] 内の文字のいずれかにマッチします.例えば、 [abc] は a, b, c のいずれかにマッチします.連続した文字列を指定するには、先頭と終端を - で繋いで指定します.[abcdefg] は [a-g] と同義になります.また、 [ の直後に ^ がある場合には意味が逆になり、指定した文字列の補集合、つまり [ ] 内に置かれた文字以外の文字にマッチします.例えば、[^abc] という正規表現は a, b, c 以外の文字にマッチします.
( )
( と ) で囲むと、ある一部分の文字列や正規表現をひとまとめとして扱います.例えば、(xyz)+は、xyz の一回以上の繰り返し、つまり xyz や xyzxyz、xyzxyzxyz という文字列にマッチします.
{n}
{n,}
{n,m}
m、nにはそれぞれ数値が入ります.数字が n だけの場合は、n 回ちょうどの繰り返しの指定になります.{n,} は n 回以上の繰り返し、{n,m} では n 回以上 m 回以内の繰り返し指定となります.例えば、{3,5} は、直前の正規表現の3回から5回の繰り返しになります.つまり、ab{3,5}c は、abbbc, abbbbc, abbbbbc にマッチしますが、 abc や abbc 、abbbbbbcにはマッチしません.
^
行の先頭にマッチします.例えば、^abcは、abc にマッチしますが、aaabc にはマッチしません.
$
文字列の末尾にマッチします.例えば、xyz$は、xyzとマッチしますが、xyzzzにはマッチしません.
[:classname:]
文字クラス指定の際、名前による文字クラスの指定が可能です.
[:alnum:] アルファベットと(十進)数字
[:alpha:] アルファベット
[:blank:] 空白文字(スペース、タブ等)
[:cntrl:] 制御文字
[:digit:] 十進数字
[:graph:] 印字可能かつ表示可能な文字(スペースは印字可能だが表示可能ではない)
[:lower:] アルファベットの小文字
[:print:] 印字可能な文字(=制御文字以外の文字)
[:punct:] 句読点(通常の文字、数字、制御文字、スペースのいずれでもない文字)
[:space:] スペース、タブ、改ページ
[:upper:] アルファベットの大文字
[:xdigit:] 十六進数字
これらは実際に使用するときには [[:lower:]] のような形になります.
\
\ は厳密には正規表現演算子ではありませんが、上述した正規表現演算子を文字そのものとして扱いたい場合に、その前に \ を置くことによって演算子の働きを抑制することができます.例えば、\. は、. という文字そのものに対する指定であって、任意の一文字を表すものではありません.