問題文:
/_
以下の正規表現で、または\\
または./
または--
または特殊文字\-
の他の組み合わせ( )のような2つの連続した特殊文字を受け入れる正規表現を構築しようとして./\_-
います:
^[a-zA-Z0-9\d]{1}[a-zA-Z0-9\d._/\-]{0,49}$
ここで何が間違っていますか?
mlorbetske の正規表現は、条件付き正規表現の使用を削除するために少し書き直すことができます。0-9
でカバーされているため、正規表現から冗長も削除します\d
。
^[a-zA-Z\d](?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-]){0,49}$
この部分(?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-])
は、英数字または特殊文字.
, _
, /
,\
の-
前の文字がまだ特殊文字でない場合に一致します。(?:pattern)
また、正規表現は検証のみに使用されているように見えるため、グループを非キャプチャーにします。
ゼロ幅の負の後読みアサーションを利用(?<!pattern)
して、前の文字が特殊文字ではないことをアサートしました。
この正規表現は、あなたが求めているものと一致しているようです
^[a-zA-Z0-9\d](?(?<=[\._/\\-])[a-zA-Z0-9\d]|[a-zA-Z0-9\d\._/\\\-]){0,49}$
例
Regex.IsMatch("a-12--3", Pattern); //false
Regex.IsMatch("a-12-3", Pattern); //true
条件付き 構文を使用して(?true|false)
、前の文字 (中央のグループに入る前) が句読点の 1 つである場合、句読点以外の文字のみが続く可能性があり、それ以外の場合は、指定された文字のいずれかが許可されることを示しました。
(?<=expression)
構文はゼロ幅の正の後読みです。