2010年10月3日日曜日

翻訳者と校正者のための正規表現 (10) - 文字列の引き算

]  ミ(ノ ̄^ ̄)ノスチャッ!(o_ _)oドテッ(o― ―)oムクッ.......(o ̄ii ̄)ゞハナヂブー

いや、面白い AA をいただいたのでついw
今回は引き算です。数学の時間ではありません。文字の引き算です。

以前の投稿で、文字範囲を指定して記述する方法について書きましたが、その範囲内に 1 つだけ検出したくない文字が含まれていたら嫌ですよね。

[a-z] の範囲で g だけ外したいときに、[a-fh-z] とかにするのもありです。でも、飛び飛びで複数個あったら面倒ですよね。そんなときに、次のような正規表現を使用できます。

[a-z-[ikw]]

[ ] の中に -[ ] を書くと引き算になります。上の表現は、[a-z] の範囲から [ikw] の文字クラスを除外するという意味になります。ちょっと試してみましょう。



うむ、kiwi が消えましたね。でもこの表現は、反キウイフルーツ革命市民団体全国連絡会議しか使用できません。どんな場面に実用的でしょうか。

前に、.NET 系で使用できる IsHalfwidthandFullwidthForms (半角カタカナ、全角英数記号などを検出) を紹介しました。含まれる文字は
Unicord.org のこの PDF  
を参照してください。ほとんどの場合、そのまま使用できます。だって普通は使用しない文字ですから。

ところが、これには全角括弧類も含まれているんです。お客様の大半は、半角カタカナと全角英数記号を禁止しているんですが、かなりの数のクライアントさんが
「後生ですから丸括弧は、丸括弧だけは全角にしてあげたいんです。返済はもう少し待っていただけませんか (T^T)」と懇願します。

そういう場合に、次の表現を使用できます。


[\p{IsHalfwidthandFullwidthForms}-[()]]
文字コードの場合は
[\uFF00-\uFFEF-[()]]

これは半角カタカナと全角英数記号を検出しながら、全角丸括弧だけは例外という正規表現になります。実際にやってみましょう。



全角丸括弧にはヒットしませんでしたね。正規表現の引き算は、例外の作成に適しています。それではこの辺たいじゃないよ、変態という名の紳士だよ!

0 件のコメント: