いや、面白い 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 件のコメント:
コメントを投稿