3

(ASP.NET RegularExpressionValidatorで使用するための)正規表現を作成しようとしています。

検証する文字列に文字Aとそれに続く文字Bが含まれている場合、検証は失敗するはずです。

検証する文字列に文字Fとそれに続くW、X、Y、Zのいずれか、または任意の数字が含まれている場合、検証は失敗するはずです。

私はこれを思いついた

(AB)|(F(W|X|Y|Z|[0-9]))

しかし、私が知る限り、入力がその式と一致する場合、検証は成功します。

入力がその式と一致しない場合に検証を失敗させるにはどうすればよいですか?

どうもありがとう、

デビッド

4

4 に答える 4

5

これがネガティブな先読みの目的です

(?!.*AB)(?!.*F[WXYZ\d])

これらの文字列で失敗します。まだどのテキストとも一致していません(一致するかどうかを確認するだけで十分です)。したがって、一致結果は常に空の文字列になります。

于 2012-09-21T08:43:54.213 に答える
3

これはうまくいくでしょう:

A[^B]|F[^WXYZ0-9]|[^AF].
  • Aの後にB以外のものが続く、または
  • Fの後にW、X、Y、Zまたは数字以外のものが続く、または
  • AまたはFの後に任意の1文字が続く他の何か

これは「A$」または「@@」にも一致することに注意してください。「1文字の後に1文字または数字」だけを一致させたい場合は、次を使用します。

A[AC-Z0-9]|F[A-V]|[B-EG-Z][A-Z0-9]

正規表現はポジティブマッチに優れています。

正規表現バリデーターの場合、文字列全体が一致する必要があることに注意してください(部分文字列のみが一致する場合、バリデーターは検証の失敗を報告します)

于 2012-09-21T08:31:16.517 に答える
2

プログラミング言語で提供されている論理not演算子を使用して、正規表現を変更する必要がない一致操作によって返される結果を否定できます。

編集:上記がオプションでない場合は、これらの質問1、2、および3を参照してください

于 2012-09-21T08:32:34.380 に答える
1

この正規表現との対戦を実行できます

^(?!^.*?AB)(?!^.*?F[WXYZ\d]).*$

ここに実際の例があります。基本的には、「前後に任意の文字数のABを含む文字列を除き、Fの後にW、X、Y、Zまたは数字が続く文字列を除くすべての文字列を検索する」という意味です。ティム・ピエツカーの回答で提供されたこのリンクの情報

于 2012-09-21T09:14:19.957 に答える