问题陈述:
我正在尝试构建一个正则表达式,它在下面提到的正则表达式中接受两个连续的特殊字符,例如:/_
或\\
或./
或--
或\-
或特殊字符()的任何其他组合:./\_-
^[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]|(?<![._/\\\-])[._/\\\-])
匹配字母数字字符或特殊字符.
, _
, /
, 。我还使组 non-capturing ,因为似乎正则表达式仅用于验证。\
-
(?: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)
语法来表示如果前面的字符(在进入中间组之前)是标点字符之一,那么它后面只能有非标点字符,否则允许任何指定的字符。
(?<=expression)
语法是一个零宽度的正向look- behind 。