2016-04-25 9 views
0

最初の3文字は、I、O、S、またはZを除く大文字でなければなりません。次にダッシュを3文字以外の4文字にすることができます。これは最初の否定的な先読みでも、最初の捕獲グループの複数のネガティブ先読み

^((?!.*[IOSZ])[A-Z]{3})-((?!.*3)(.{4}))$ 

たとえば、AAA-444Zをキャプチャしたいと思います。

答えて

0

したいので、あなたは、先にあなたの外観から.*を削除する必要があります3文字を一致させ、キャプチャグループから制限数を外します。ポイントその

^((?![IOSZ])[A-Z]){3}-((?!3).){4}$ 

Demo

注:

^((?![IOSZ])[A-Z]){3}-[^3]{4}$ 

Demo

あなたが先に2つの負の外観を使用したい場合は、以下を使用します。また、最後の部分のために否定文字クラスを使用しますあなたがルックアラウンドを使うとき、パターンが次のものであることを指定したい、あるいは特殊なパターンで先行することを指定したいとき、そしてlinあなたのルックアラウンドベースのパターン全体の制限を考慮する正規表現エンジンを言う必要がある文字の数。第1のものは(?![IOSZ])[A-Z])であり、第2のものは((?!3).)である。

+0

ありがとう私はメカニズムを理解するために2つの否定的な先読みでこれをしたいと思います – ocram

+1

@ocram編集をチェックしてください。 – Kasramvd

+0

'^((?![IOSZ])([AZ] {3})) - ((?! 3)(。{4}))$'それもやるよ – ocram

0

あなたは、この正規表現を使用することができるように、この要件のいずれかの先読みを必要としません:

^[A-HJ-NP-RT-Y]{3}-[^3]{4}$ 
  • [A-HJ-NP-RT-Y]{3}I, O, S or Zでない大文字の3インスタンスと一致します。
  • [^3]{4}は、3以外の文字と一致します。以下のコメントを1として

RegEx Demo

あなたが本当に使うだけにして、負の先読みにしたい場合:

^(?:(?![IOSZ])[A-Z]){3}-(?:(?!3).){4}$ 

Regex Demo 2

+0

ありがとうございました。私は一般的にこれを理解するために否定的な先読みでそれをして、質問に答えないようにしたい。 – ocram

+0

ok ok lookahead regexの更新された回答を確認してください。 – anubhava

+1

大変ありがとうございます!私は非捕捉グループのことを知らなかった – ocram