-7

问题陈述:

我正在尝试构建一个正则表达式,它在下面提到的正则表达式中接受两个连续的特殊字符,例如:/_\\./--\-或特殊字符()的任何其他组合:./\_-

^[a-zA-Z0-9\d]{1}[a-zA-Z0-9\d._/\-]{0,49}$

我在这里做错了什么?

4

2 回答 2

2

mlorbetske 的正则表达式可以稍微重写以删除条件正则表达式的使用。我还从正则表达式中删除了多余0-9的部分,因为它已被\d.

^[a-zA-Z\d](?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-]){0,49}$

如果前面的字符不是特殊字符,则该部分(?:[a-zA-Z\d]|(?<![._/\\\-])[._/\\\-])匹配字母数字字符或特殊字符., _, /, 。我还使组 non-capturing ,因为似乎正则表达式仅用于验证。\-(?:pattern)

我利用零宽度否定后向断言(?<!pattern)来断言前面的字符不是特殊字符之一。

于 2013-01-08T09:47:04.637 回答
1

这个正则表达式似乎符合您的要求

^[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 。

于 2013-01-08T09:02:39.217 回答