12

e、n pを除く文字azに一致する正規表現を書きたいです。私は書くことができます:

[a-df-moq-z]

正規表現を除外する文字をより簡単に解読できるようにするためだけに、 ([az except ^enp]) のようなものを書く方法があるかどうか疑問に思っています。

4

3 に答える 3

21

次のように否定先読みを使用できます。

(?![enp])[a-z]

ライブデモ: http://www.rubular.com/r/1LnJswio3F

于 2013-05-28T13:18:40.640 に答える
2

使用している正規表現のフレーバーに応じて、これを行う方法がいくつかあります。 @anubhava のソリューションは、先読みをサポートする任意のフレーバーで機能するため、最も移植性があります。

単語全体または文字列全体に一致させたい場合は、その正規表現をグループにラップして、正規表現エンジンに全体を 1 つのアトムとして扱わせる必要があります。

/\b(?:(?![enp])[a-z])+\b/

/^(?:(?![enp])[a-z])+$/

もう 1 つの可能性は、単語/文字列全体をスキャンして、不要な文字が含まれていないことを確認してから、通常の方法で照合することです。

/\b(?!\w*[enp])[a-z]+\b/

/^(?!\w*[enp])[a-z]+$/

それはすべてかなりハックですが、JavaScript では、あなたが立ち往生しているものです。他のフレーバーの中には、集合交差 (Java、Ruby 1.9.x) など、この目的に特化したツールを提供するものがあります。

[a-z&&[^enp]]

..または減算の設定 (.NET):

[a-z-[enp]]

Unicode コンソーシアムは、このすべての集合演算に夢中になっていますが、私の知る限り、現実世界の正規表現のフレーバーは、その提案のすべてを実装するところまで来ていません。

于 2013-05-28T14:23:06.150 に答える
1

which worksを使用できます[^[^a-z]enp]が、理解するのが少し混乱します。

[^a-z]enpaz 以外のすべての文字を含み、e、n、および p を追加するクラスを定義します。次に、そのクラスを反転すると、e、n、および p を除く az に一致するクラスが得られます。

ここで試すことができますhttp://www.rubular.com/r/VEZNFgxgfI

更新:しかし、JavaScript (テスト済みの Chrome) では動作しないようです。Ruby と PCRE が動作するはずです。

于 2013-05-28T13:47:08.827 に答える