Вы можете использовать обратные ссылки , чтобы найти пары вещей, которые появляются в строке:
(\d+)\1
Это будет соответствовать одному или нескольким символам, за которыми снова следует та же последовательность.\1
- это обратная ссылка, которая ссылается на содержимое первой группы захвата.
Если вы хотите сопоставить числа, которые появляются в строке несколько раз, вы можете использовать шаблон, такой как
(\d)(?=\d*\1)
Снова мы используем обратную ссылку, но на этот раз мы также используем lookahead .Lookahead - это утверждение нулевой ширины , которое указывает что-то, что должно быть сопоставлено (или не сопоставлено, если используется отрицательный lookahead) после текущей позиции в строке, но не использует никаких символов и не перемещаетПоложение движка регулярных выражений в строке.В этом случае мы будем утверждать, что содержимое первой группы перехвата должно быть найдено снова, хотя не обязательно непосредственно рядом с первой.Указав \d*
в предпросмотре, она будет считаться парой, только если она находится в пределах одного и того же числа (поэтому, если между числами есть пробел, пара не будет сопоставлена - если это нежелательно, \d
можно изменить на .
, что будет соответствовать любому символу).
Соответствует первым 3 и 4 в 34342
и первым 1, 2, 3 и 4 в 12332144
.Однако обратите внимание, что если у вас есть нечетное количество повторений, вы получите дополнительное совпадение (т. Е. 1112
будет соответствовать первым двум 1), потому что предпросмотры не потребляют.