2010-08-28 3 views
2

Мне нужна помощь, которая подходит к регулярному выражению, чтобы соответствовать, если строка содержит более одного символа. Я уже проверил длину двух строк, и они всегда будут равны. Вот что я имею в виду, например. Строка «aab» и «abb». Эти два должны соответствовать регулярному выражению, потому что они повторяют символы, «aa» в первой строке и «bb» во втором.Регулярное выражение для соответствия более чем одному вхождению символа

+2

Подходит ли 'aba'? – Lazer

+0

нет, это не так. Я использую это для решения проблемы анаграммы, и aba может быть записано как baa или aab. Первая строка, которую я дал, является исходной строкой, а вторая будет той, которая должна быть проверена, и, как вы можете видеть, они не являются анаграммами. – Zerobu

+0

Поскольку 'perl' не имеет никакого отношения к этому вопросу, я удалил' perl тег. Если вам действительно нужно это сделать, пожалуйста, уточните аргументы в пользу добавления тега 'perl'. – BalusC

ответ

9

Так как вы говорите «аба» -стиль повторение не в счет, обратно-ссылки должны сделать это просто:

(.)\1+ 

бы найти последовательности символов. Попробуйте:

java.util.regex.Pattern.compile("(.)\\1+").matcher("b").find(); // false 
java.util.regex.Pattern.compile("(.)\\1+").matcher("bbb").find(); // true 
+0

Я скопировал и вставил это и, похоже, имеет синтаксическую ошибку – Zerobu

+0

Что вы скопировали и вставляете? Обратите внимание, что при использовании регулярного выражения в строке Java вам нужно убрать определенные символы (см. Код Java, который я опубликовал, который работает для меня здесь). – vanza

+0

Я скопировал код java, который вы опубликовали – Zerobu

2

Если вы проверяете анаграммы, возможно, другой алгоритм будет лучше.

Если вы сортируете строки (как оригинал, так и кандидат), проверка анаграмм может быть выполнена с помощью сравнения строк.

0
static final String REGEX_MORE_THAN_ONE_OCCURANCE_OF_B = "([b])\\1{1,}"; 
static final String REGEX_MORE_THAN_ONE_OCCURANCE_OF_B_AS_PREFIX_TO_A = "(b)\\1+([a])"; 
Смежные вопросы