2

これまでのところ、

^[0-9a-zA-Z-]+$

数字、文字、ダッシュの一致に優れていますが、大文字と小文字の両方で net という単語を除外したいと思います。

すなわち、

マッチ:

net123

123ネット

等...

一致しない:

ネット

ネット

その詳細を正規表現に追加するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

3

次のパターンを使用できます。

^(?i)([\da-mo-z-]+|n+(?!et)|(?<=\d)net|net\d)+$

説明:

(?i)大文字小文字を区別しません

[\da-mo-z-]文字クラスなしn

|また

n+(?!et)n 1 回以上、次の文字が続かないet

(?<=\d)net数字の前にネット

net\dネットと数字

このパターンは、単語 を含む文字列を除外しますが、単語netである文字列のみを除外する場合は、次のnetようにします。

^(?i)(?!net$)[a-z\d-]+$
于 2013-06-04T15:28:59.903 に答える
1

これが最善のアプローチであるかどうかはわかりませんが、次のようなことができます。

@"^(?(net$|NET$) |[0-9a-zA-Z-]+$)"

基本的に、文字列が「net」または「NET」であるかどうかをチェックしており、そうであればスペースと照合します。それは常に失敗します。それ以外の場合は、通常の一致を行います。

詳しい説明はこちら。

まず、基本的な if ステートメントと開始^アンカーから始めます。^(?(if)then|else)

|if ステートメントについては、「net」または「NET」をチェックします。これらはそれぞれ終了$アンカーの前にあるため、部分文字列ではないことがわかります。結果は次のとおりです。^(?(net$|NET$)then|else)

次に、ステートメントが正しい場合は、スペース " " と照合しました。ステートメントが既に「net」または「NET」であることはわかっているため、この部分は常に失敗します。残りは次のとおりです。^(?(net$|NET$) |else)

最後に、以前のパターンをelse句にプラグインして取得します:^(?(net$|NET$) |[0-9a-zA-Z-]+$)

上記の答えを見た後、私は否定的な先読みについて思い出しました。先読みを使用すると、この答えは次のようになります。

@"^(?!net$|NET$)[0-9a-zA-Z-]+$"
于 2013-06-04T15:54:15.280 に答える