2013-10-06 2 views
2

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

слова примеры

syzygy 
error 
banana 

Я пытался делать

^[a-z]([a-z])[a-z]+[a-z]+\1$ 

и это соответствует линии и захватывает мое второе письмо, но мне нужно, чтобы убедиться, что вторая буква повторяется

s(y)z y <-same as second character g y <- ends in same character 

поэтому я должен быть уверен в строке, что y находится во второй позиции, 1 раз посередине и конец строки

+0

Ваше первое предложение полностью пошел над моей головой. Можете ли вы опубликовать ожидаемый результат? –

+1

«Кажется, не так»? Почему бы не попробовать сначала и опубликовать то, что вы получили, и то, что вы хотели получить? – Jerry

+0

@ user2852075: Как вы определяете середину здесь? – anubhava

ответ

1

Один из способов, которым вы могли бы это сделать, если я правильно понимаю, что вы используете отрицательный взгляд вперед.

^.(.)(?:(?!\1).)*\1(?:(?!\1).)*\1$ 

Точка . соответствует любому символу, кроме символов разрыва строки. Используя \1, мы ссылаемся на совпадение, которое было сохранено в первой группе захвата.

См regular expression explanation

live demo См захват второго символа и сопоставления всей строки.

См. live demo о том, как \1 соответствует повторяющимся символам.

+0

это похоже на работу! как это работает (?! – user2852075

+0

Это может быть проблемой, если в середине имеется более одного \ 1. – sln

+0

OP сказал слова с '3' повторяющимися символами, начиная со второй позиции, где-то посередине и заканчивается? – hwnd

1
# ^[a-z]([a-z])[a-z]*\1[a-z]*\1$ 

^ 
[a-z] 
([a-z]) # (1), Second letter 
[a-z]* 
\1   # A Backref to second letter in the middle 
[a-z]* 
\1   # A Backref to second letter at the end 
$ 
+0

+1 для оригинального вопроса =) – hwnd

1

Вы можете использовать это регулярное выражение:

^.(.).*?\1.*?\1$ 
+0

это соответствует более чем одному повторяющемуся символу в середине – user2852075

+1

+ 1 Исходя из оригинальной постановки задачи OP, это правильно. – sln

+0

@ user2852075: Перед вашими изменениями не было ясно, что вы хотите ровно 3 совпадения одного и того же символа. – anubhava

Смежные вопросы