10

Perl版読み仮名振りプログラムの改良

プログラム例

正規表現について(p. 219)

Perl(バージョン5)の正規表現の「メタキャラクタ(meta character)」のおもなものを説明しよう。書籍で説明した「^」「$」などのように,文字そのものを表すのではなく特別な働きをする文字のことだ。メタキャラクタには以下のようなものがある。自分でいろいろ試してみると少しずつ使えるようになるはずだ。

単一の文字や数字にマッチするもの
文字説明例の説明
.改行文字を除く任意の1文字(マッチさせるときや置換するときに/mオプションを付けると,改行文字にもマッチさせられる) w..dwordwardなどにマッチ
[...]...の任意の1文字。「-」を使って範囲を表すことができる。2バイト(あるいはそれ以上のバイト数をもつ)文字に対応していれば[あ-お]などの表現も使える[a-z0-9]小文字または数字の任意の1文字
[^...]...中に入っていない任意の1文字[^a-z0-9]小文字でも数字でもない任意の1文字
\d1つの数字。[0-9] と同じ
\D 数字以外の1文字。[^0-9] と同じ
\w アルファベットまたは数字(単語,word)の1文字。 [0-9a-zA-Z] と同じ
\W アルファベットと数字以外(単語以外)の1文字。 [^0-9a-zA-Z] と同じ
\s 空白文字(スペース,タブ,改行)
\S 空白文字以外の文字
\n 改行
\t タブ
\12 8進数の値
\x811 16進数の値
\cX 制御文字
\[ メタキャラクタ(特別な意味をなくす)
\b (空白で単語が分かれる言語の)単語の区切り([]の中で指定された場合を除く) [a-zA-Z]+\b[a-zA-Z]+\b「World Cup.」などにマッチ
\B 単語の区切り以外
^ 行頭
$ 行末
\A 文字列の先頭。^と違い,/mオプション(\nを中に含む文字列を複数の行から成るものとして扱い,\nの後が行頭にマッチする)を指定してしたときでも文字列の先頭としかマッチしない。
\Z 文字列の最後(Perl 5)。$と違い,/mオプションを指定したときでも文字列の最後としかマッチしない。
繰り返しパターンを表すもの
文字説明例の説明
x? 0個または1個のx
x* 0個以上のx
x+ 1個以上のx
x{m,n} m個以上n個以下のx(「,」などの前後に空白を置いてはいけない)
A|B|C A,B,Cのいずれか was|were|will was」「were」「will」のいずれか
記憶される文字

書籍の例,たとえばp. 235を参照

文字説明
(...) あとで参照する文字列(下記)
\1 または $1 ()で囲まれた最初の文字列
\2 または $2 ()で囲まれた2番目の文字列
\3 または $3 ()で囲まれた3番目の文字列
なお,\1$1は後方参照(backreference)と呼ばれる。\1$1はよく似ているが,\1はパターン内でのみ有効であるのに対して,$1は同じブロック内(「{」から「}」までの間)あるいは次に成功したマッチングまで有効になる。