Регулярно проверяйте, чтобы символ в диапазоне не повторялся - PullRequest
3 голосов
/ 21 марта 2010

Я хочу сопоставить со строками, такими как AhKs & AdKs (то есть две карты Ah = Ace of Hearts).Я хочу сопоставить две неподходящие карты с регулярным выражением, которое у меня сейчас есть "^[AKQJT2-9][hscd]{2}$", но это может совпадать с такими руками, как AhKh (подходит) и AhAhЕсть ли способ, возможно, использовать обратные ссылки, чтобы сказать, что второй [hscd] не может быть таким же, как первый (аналогично [AKQJT2-9])

Ответы [ 4 ]

5 голосов
/ 21 марта 2010

Не совсем элегантно, но работает:

^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$
4 голосов
/ 21 марта 2010

Попробуйте это регулярное выражение:

^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$

Здесь отрицательное прогнозное утверждение (?!…) используется, чтобы запретить четвертому символу совпадать со вторым (совпадениепервая группировка).

Но если реализация регулярного выражения не поддерживает вспомогательные утверждения, вам, вероятно, потребуется расширить его до следующего:

^[AKQJT2-9](h[AKQJT2-9][scd]|s[AKQJT2-9][hcd]|c[AKQJT2-9][hsd]|d[AKQJT2-9][hsc])$
1 голос
/ 21 марта 2010

Да. Используйте обратную ссылку вместе с отрицательным прогнозом.

^([AKQJT2-9])([hscd])(?!\1)(?!.\2)[AKQJT2-9][hscd]$
1 голос
/ 21 марта 2010

на помощь приходит отрицательный взгляд

/^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$/

:( слишком поздно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...