Вопрос:
Как запретить повторные символы, используя регулярное выражение?
Это регулярное выражение не должно допускать
1—234567890 1—2345—1212
Однако верно следующее
1-2-3-4-5-6-7-8-9-0 1234567890
Единственное беспокойство здесь – минус, который нельзя вводить друг за другом, поэтому — не должен совпадать
Нет ограничений в том, сколько тире в строке. Я использую С#
Заранее спасибо
Лучший ответ:
Используйте отрицательный lookahead: ^((.)(?!2))+$ будет соответствовать строке без повторных символов.
Альтернативно – потенциально быстрее: выполните поиск (.)1 который будет соответствовать паре повторяющихся символов.
Ответ №1
Это будет соответствовать любой паре одинаковых символов:
«(.)1»
Альтернативно, для словных символов:
«(w)1»
Таким образом, если регулярное выражение совпадает, вы хотите сбой проверки.
Обновить:
Теперь, когда вы выяснили, что только — это то, что вам нужно, чтобы найти, вот еще один вариант:
«—»
Конечно, вы можете просто использовать Contains(«—«) в строке в таком случае.
Ответ №2
Если тире – единственный персонаж, которого вы волнуете:
// 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
Эта задача не подходит для регулярных выражений. То, что вы, вероятно, захотите сделать, это написать цикл, который будет перебирать строку и искать дубликаты. Самый эффективный способ сделать это – использовать некоторую хеш-структуру данных, такую как словарь.