如何使用正则表达式禁止重复的字符?
这个正则表达式不应该允许
1--234567890
1--2345--1212
但是以下是有效的
1-2-3-4-5-6-7-8-9-0
1234567890
这里唯一的问题是减号不能互相输入,所以--
不应该匹配
字符串中有多少短划线没有限制。 我正在使用C#
先谢谢
答案 0 :(得分:4)
这将匹配任何一对相同的字符:
"(.)\1"
或者,对于单词字符:
"(\w)\1"
因此,如果正则表达式匹配,则您希望验证失败。
更新
现在您澄清了只有--
才是您需要匹配的内容,这是另一种选择:
"--"
当然,在这种情况下,您只需对字符串使用Contains("--")
。
答案 1 :(得分:2)
使用否定前瞻:^((.)(?!\2))+$
将匹配没有重复字符的字符串。
或者 - 可能更快:搜索(.)\1
,它将匹配一对重复的字符。
答案 2 :(得分:1)
如果短划线是你唯一关心的角色:
// this regular expression is "inexact", three dashes always has two dashes, etc
var bad = new Regex("--");
if (bad.IsMatch(input))
{
throw new ArgumentException("Not a valid format", "input");
}
或者更简单:
// regular expression? no need
if (input.Contains("--"))
{
throw new ArgumentException("Not a valid format", "input");
}
答案 3 :(得分:0)
此任务不适合正则表达式。您可能想要做的是编写一个循环来遍历字符串并搜索重复项。最有效的方法是使用一些基于散列的数据结构,如字典。