# 翻訳者のための正規表現~方言の話、その他
正規表現でちょっと困るのは、環境によって表現ルールが違っていることです。
・UNIX経由の、由緒正しいルール
・POSIX規格
・Perl
・秀丸エディタ
・Wordのワイルドカード(この語の本来の意味については、いずれ)
などなど、共通部分もありますが、文法や自由度に差があります。
ちょっとずつ違いがあるのに「正規」なんて、ますますいかんですね、この訳語は。
今回は、少しずつ実用的なパターンを増やしながら、この違いについて簡単に触れておきます。そして、最終的にこのシリーズでは、
秀丸エディタで採用されている文法
を基本とし、必要があれば別のパターンを紹介する、ことにしたいと思います。理由は、私がいちばん慣れているからw
さて、前回使ったパターンは、
[0-9]
という形でした。
●文字の範囲を表すときは、ハイフンで結び、[ ]で囲む●
ルールとまとめておきましょう。
注意:今後このシリーズでは、明記しないかぎりパターンとして入力する文字はすべて半角です。漢字とかカタカナとか、検索対象の文字はもちろん全角もあります。
[0-9] と書けば、10個の数字いずれかにマッチします。
同じように、
[a-z] と書けばアルファベット26文字のいずれかにマッチします。大文字小文字の区別は設定やオプションによって違うのですが、
[a-zA-Z]と書けばその設定やオプションに関係なくアルファベット大小文字の52文字にマッチします。
この例でわかるように、複数の範囲を並べるとき、区切りとか必要ないんですね。
このルールの発展形として、「その範囲は除く」というパターンも簡単に指定できます。ところが、ここで問題になってくるのが、今回のテーマである方言なわけです。
[^0-9a-zA-Z]
これが秀丸エディタでの指定。[ ]の中で、範囲の前に ^ (カレット、キャレット)を付けます。ところが、同じような「除外」を指定する記号が、MS Wordだと感嘆符になり、
[!0-9a-zA-Z]
となります。
このように、方言は少しずつあるのですが、1つの文法体系を覚えてしまえば、別の体系でも十分類推がききます。私が秀丸エディタの文法をこのシリーズで標準とするのも、他の体系への類推が容易だからです(ルールがほぼPerl互換なので)。
ところで、カレットも感嘆符も、除外するのは別に範囲とは限りません。直後にある1文字でも、並べた複数文字でもいい。
[^個]
…… 「個」の字のみ除外。そんな用途はあんまり考えられませんけど。
[^0-9何]通り
…… 数字の後以外で「○通り」を見つけます。「以下の通り」をエラーとしたい場合。
ただし、除外の意味をもつのは[ ]の中でだけです。[ ]の外で使うと、別の意味を持ってしまいます。このように、同じ文字が場所によって違う意味をもつことがあるのも、正規表現で難しい点かもしれません。
また、[ ]の中で先頭に置かないと除外の意味になりません。
【今回までのまとめ】
●文字の範囲を表すときは、ハイフンで結び、[ ]で囲む
●除外するときは[ ]の中で最初に、 ^ または ! を付ける
【例】
[0-9a-zA-Z]
意味: 数字、英字の大文字と小文字にマッチします。
[ァ-ヶーぁ-ん亜-熙]
意味:日本語の文字種(漢字、かな、カナ)すべてにマッチします。
[ァ-ヶー] [ァ-ヶー]
意味:カタカナ語の間に半角スペースがある箇所を見つけます。
行な[わいうえおっ]
意味: 「行なう」という送りがな。動詞の活用形すべてにマッチします。
[個箇カヵヶ]所
意味:「か所」が正しいという仕様のとき、それ以外の誤表記を見つけます。
[^に]従って
意味: 接続詞として「従って」が使われている箇所を見つけます。
※範囲指定は、文字コードに依存するので、環境によって指定する文字はこれと違う場合があります。
【追記】
例に間違いがあるのをコメント欄でご指摘いただきましたので、いちぶ修正しました。
この記事へのコメントは終了しました。
コメント
>「○か所」という言い方が正しいとき、それ以外の誤表記をさがします。
というのであれば、下の正規表現が正解ではないでしょうか。
[個箇カヵヶ]所
※クラスの中のキャレットは不要だと思います。キャレットが付いていると、正しい「か所」が引っかかってしまいます。
ちなみに初心者がよく犯す間違いですが、「か所」以外は誤表記なのだからといって次のように定義すると悲惨です。
[^か]所
「場所」とか正しいものがたくさん引っかかって泣きます。
投稿: こばやしたかし | 2012/11/08 19:42:41
こばやしさん、修正ありがとうございます。
投稿: baldhatter | 2012/11/08 20:06:21