Вы можете использовать это регулярное выражение, которое будет соответствовать трем символам, где первый и третий совпадают, используя обратную ссылку, где в качестве среднего может быть любой,
(.).\1
Демо
Редактировать:
Выше регулярное выражение даст только неперекрывающиеся совпадения, но, так как вы хотите получить все совпадения, которые даже перекрываются, вы можете использовать этот положительныйпосмотрите на регулярное выражение, которое не использует следующие два символа, а группирует их в group2, поэтому для желаемого результата вы можете добавлять символы из group1 и group2.
(.)(?=(.\1))
Демонстрация ссовпадения совпадений
Вот код Java (я никогда не программировал на Ruby), демонстрирующий код и ту же логику, которую вы можете написать на своем любимом языке программирования.
String s = "b9fgh9f1;2w;111b2b35hw3w3ww55";
Pattern p = Pattern.compile("(.)(?=(.\\1))");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group(1) + m.group(2));
}
Печатает все ваши предполагаемые совпадения,
111
b2b
w3w
3w3
w3w
Кроме того, вот код Python, который может помочь, если вы знаете Python,
import re
s = 'b9fgh9f1;2w;111b2b35hw3w3ww55'
matches = re.findall(r'(.)(?=(.\1))',s)
for m in re.findall(r'(.)(?=(.\1))',s):
print(m[0]+m[1])
Печатает все ваши ожидаемые совпадения,
111
b2b
w3w
3w3
w3w