Z wyjątkiem asercji o zerowej długości, znak na wejściu zawsze będzie używany w dopasowaniu. Jeśli kiedykolwiek będziesz chciał uchwycić pewną postać w ciągu wejściowym więcej razy, będziesz potrzebować asercji o zerowej długości w regex.
Istnieje kilka zerowej długości twierdzenie (np ^
(początek/wejście liniowe), $
(koniec/wejście liniowe), \b
(granica słowo)), ale przeglądowej arounds ((?<=)
pozytywny look-tył i (?=)
pozytywne patrzenie w przyszłość) to jedyny sposób, w jaki można uchwycić nakładający się tekst z danych wejściowych. Negatywne rozglądanie się ((?<!)
negatywne spojrzenie za, (?!)
negatywne spojrzenie z wyprzedzeniem) nie są tu zbyt użyteczne: jeśli potwierdzą prawdziwość, przechwycenie w środku zakończyło się niepowodzeniem; jeśli potwierdzą fałsz, wówczas mecz się nie powiedzie. Twierdzenia te mają zerową długość (jak wspomniano wcześniej), co oznacza, że będą twierdzić, nie pochłaniając znaków w łańcuchu wejściowym. W rzeczywistości będą pasować do pustego ciągu, jeśli twierdzenie przeminie.
Stosując powyższy wiedzy regex, który działa w Twoim przypadku będzie:
(?=(\w\w))
[Lookahead] (http://stackoverflow.com/questions/320448/overlapping-matches-in-regex) –