Это должно работать:
^((?<char>\w)(?!\k<char>))*$
Это соответствует abc
, но не abbc
.
Ключ должен использовать так называемое «отрицательное прогнозное утверждение нулевой ширины» (синтаксис: (?! Подвыражение)).
Здесь мы удостоверяемся, что за группой, совпадающей с (?<char>\w)
, не следует сама по себе (выражается (?!\k<char>)
).
Обратите внимание, что \w
можно заменить любым допустимым набором символов (\w
не соответствует символам пробелов).
Вы также можете сделать это без именованной группы (обратите внимание, что указанная группа имеет номер 2):
^((\w)(?!\2))*$
И важно начинать с ^
и заканчивать $
, чтобы соответствовать всему тексту.
Если вы хотите исключить только текст с последовательными x
символами, вы можете использовать это
^((?<char>x)(?!\k<char>)|[^x\W])*$
или без обратных ссылок
^(x(?!x)|[^x\W])*$
Все синтаксические элементы для .NET Framework Регулярные выражения объяснены здесь .