RegEx два одинаковых символа в строке - PullRequest
0 голосов
/ 01 ноября 2018

Я начинаю с RegEx и мне нужна помощь, я хочу проверить, что есть два одинаковых символа, за которыми следует A, или что они разделены (но остаются неизменными) и в середине A. Я объясняю на примерах:

BBA -> true
ABB -> true
BAB -> true
CCA -> true
ABC -> false
BAC -> false
BBBA -> false (there have to be only two)
ABBB -> false (there have to be only two)

На данный момент у меня что-то похожее на это, но оно не работает правильно:

(([B-Z])\1{2}A) | ([B-Z]{1}A[B-Z]{1}) | (A([B-Z])\1{2})

Я знаю, что не подхожу к правильному ответу, чему я учусь. Если бы кто-то мог помочь мне, я был бы очень признателен.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Используйте \b для сопоставления только слов и обратных ссылок для каждого |.

\b([B-Z])\1A|([B-Z])A\2|A([B-Z])\3\b

Проверка: https://regexr.com/42bp0

0 голосов
/ 01 ноября 2018
Pattern pattern = Pattern.compile("([B-Z])\\1A|A([B-Z])\\2|([B-Z])A\\3")

обратные ссылки проходят через весь шаблон и пересекают оператор ИЛИ. В общем, это не очень подходит для решения регулярных выражений, хотя, как уже упоминалось, другие.

Обратите внимание, что вам необходимо добавить ^ и $, чтобы соответствовать только этому шаблону, например:

"^([B-Z])\\1A\$|^A([B-Z])\\2\$|^([B-Z])A\\3\$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...