これまでのところ、
^[0-9a-zA-Z-]+$
数字、文字、ダッシュの一致に優れていますが、大文字と小文字の両方で net という単語を除外したいと思います。
すなわち、
マッチ:
net123
123ネット
語
等...
一致しない:
ネット
ネット
その詳細を正規表現に追加するにはどうすればよいですか?
ありがとう!
次のパターンを使用できます。
^(?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-]+$
これが最善のアプローチであるかどうかはわかりませんが、次のようなことができます。
@"^(?(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-]+$"