Wystąpił problem z regex ruby. Muszę znaleźć wszystkie (potencjalnie nakładające się) mecze. Jest to uproszczenie problemu:Ruby Regex, uzyskać wszystkie możliwe dopasowania (bez przycinania ciąg)
#Simple example
"Hey".scan(/../)
=> ["He"]
#Actual results
#With overlapping matches the result should be
=> ["He"], ["ey"]
regex Próbuję wykonać i uzyskać wszystkie wyniki dla wygląda następująco:
"aaaaaa".scan(/^(..+)\1+$/) #This looks for multiples of (here) "a" bigger than one that "fills" the entire string. "aa"*3 => true, "aaa"*2 => true. "aaaa"*1,5 => false.
=> [["aaa"]]
#With overlapping results this should be
=> [["aa"],["aaa"]]
Czy istnieje biblioteka lub sposób zrobić regex w ruby uzyskać wyniki, których szukam?
Znalazłem kilka wskazówek, że było to możliwe w Perlu, ale po wielu godzinach badań nie znalazłem nic o sposobie na to Ruby.
Jednak udało mi się znaleźć "Javascript Regex - Find all possible matches, even in already captured matches", ale nie mogę znaleźć niczego podobnego dla Rubiego, ani znaleźć coś podobnego do ostatniej właściwości indeksu w wersji Ruby. Szczerze mówiąc nie sądzę, że i tak by zadziałało, ponieważ wyrażeń regularnych, które zamierzam użyć, jest rekursywne i opiera się na całym łańcuchu, podczas gdy ta metoda odciąga łańcuch.
Więc właściwie chcesz permutacji ciągu? – HamZa
Nie. To tylko przykład. Rzeczywiste wyrażenie regularne jest nieco trudniejsze, ale jest to problem, który pojawia się. Metoda skanowania usuwa fragmenty znalezionego ciągu i kontynuuje. Potrzebuję go, aby zachować ciąg, aby można było go obejrzeć w następnym możliwym meczu. – Automatico
Nie jestem pewien, ale pierwszy i drugi przykład są nieco sprzeczne. Podążając za pierwszym przykładem, myślę, że drugi powinien zwrócić: [aa, aa, aa, aa, aa ..., aaa, aaa, aaa ..., aaaa, aaaa, aaaa ..., aaaa , aaaaa, aaaaa] ' – HamZa