我正在尝试验证用户ID匹配的示例:
smith.jack or smith.jack.s
换句话说,任意数量的非空白字符(点除外),后跟一个点,后跟任意数量的非空白字符(点除外),可选地后跟一个点后跟任意数量的非空格字符(点除外).我想出了几个可以正常工作的变化,除了允许连续点!例如,以下正则表达式
^([\S][^.]*[.]{1}[\S][^.]*|[\S][^.]*[.]{1}[\S][^.]*[.]{1}[\S][^.]*)$
匹配"smith.jack"和"smith.jack.s",但也匹配"smith..jack""smith..jack.s"!我的天哪,它甚至喜欢一个圆点作为第一个角色.似乎编码会如此简单,但事实并非如此.我正在使用.NET,顺便说一句.
令人沮丧.
这有帮助吗?
/^[^\s\.]+(?:\.[^\s\.]+)*$/
或者,在扩展格式中,带有注释(ruby-style)
/ ^ # start of line [^\s\.]+ # one or more non-space non-dot (?: # non-capturing group \. # dot something [^\s\.]+ # one or more non-space non-dot )* # zero or more times $ # end of line /x
你不清楚你有多少次点东西,但你可以替换*
with {1,3}
或者东西,来指定允许的重复次数.
我应该说清楚斜杠是ruby(以及perl和js等)中的字面正则表达式分隔符.