復習:一般的な26文字のアルファベットにマッチする正規表現
/\w+/
éやñなどのアルファベットにもマッチする正規表現
/\p{Latin}+/
こちらも同様と思われます。
/[\p{Lower}\p{Upper}]+/
ただしこれだと全角アルファベットにもマッチします。
全角アルファベットを含まずéやñなどのアルファベットにマッチする正規表現
/[\p{Latin}&&[^A-Za-z]]+/
解説
目的とする正規表現は「全角アルファベットを含まないアルファベット」なので、アルファベットの集合にマッチする正規表現 /\p{Latin}+/
から全角アルファベットの集合を排除、言い換えるとアルファベットの集合と全角アルファベット以外の集合との積集合にマッチする正規表現が得られれば良いわけです。
文字クラス
(前略)
文字クラス内に別の文字クラスを含めることができます。[a-z[0-9]]
は[a-z0-9]
と同じ意味を持ちます。これだけではあまり意味がありませんが、文字クラスは&&
という、共通部分を取る演算をサポートしているため、これと組合せることで意味を持ちます。r = /[a-w&&[^c-g]e]/ # ([a-w] かつ ([^c-g] もしくは e)) つまり [abeh-w] と同じ文字クラスでは、否定(
^
)範囲(-
)共通部分(&&
)列挙(並べる)という演算が可能ですが、これらは- > (列挙) > && > ^
という順の結合強度を持ちます。
文字クラス内の3つのメタ文字を通常の文字の意味で使用したい場合には、\
によってエスケープする必要があります。Unicode プロパティによる文字クラス指定
また、Unicodeのプロパティ(属性情報)による文字クラス指定も可能です。 以下の記法が使えます。
\p{property-name} \p{^property-name} (否定) \P{property-name} (否定)
サポートされているプロパティのリストは https://github.com/k-takata/Onigmo/blob/master/doc/UnicodeProps.txt を 参考にしてください。また、プロパティの意味は Unicode の仕様を参照してください。
正規表現 (Ruby 2.2.0)