Domyślam się, że będzie to głupi błąd, ale dla mnie poniższy zwraca tablicę zawierającą tylko "M". Zobacz:Ruby Regex, tylko jedno przechwytywanie (bardzo proste!)
/(.)+?/.match("Many many characters!").captures
=> ["M"]
Dlaczego nie zwraca tablicy wszystkich znaków? Musiałem przegapić coś jawnie oczywistego, ponieważ nie widzę co w tym złego?
Edycja: Właśnie zdałem sobie sprawę, że nie potrzebuję +? ale nadal nie działa bez niego.
Edytuj: Przepraszam! Wyjaśnię: moim celem jest umożliwienie użytkownikom wprowadzenia wyrażenia regularnego i stylizacji oraz wejściowego pliku tekstowego, gdziekolwiek jest dopasowanie, tekst zostanie otoczony elementem html i zostanie zastosowana stylizacja, nie dzielę tylko łańcuch znaków do znaków, użyłem tylko podanego wyrażenia regularnego, ponieważ było to najprostsze, choć z mojej strony było to głupie. Jak uzyskać grupy przechwytywania ze skanowania() lub czy jest to niemożliwe? Widzę, że $ 1 zawiera "!" (ostatni mecz?) i żadnych innych.
Edytuj: Gosh, to naprawdę nie jest mój dzień. Jak poinformował mnie injekt, przechwyty są przechowywane w osobnych tablicach. Jak uzyskać przesunięcie tych przechwytów z oryginalnego ciągu? Chciałbym móc uzyskać przesunięcie przechwytywania, a następnie otoczyć go innym ciągiem. A może po to jest gsub? (Myślałem, że tylko wymienić mecz, a nie grupa przechwytywania)
Mam nadzieję, że ostateczna edit: prawo, niech po prostu zacznij to znowu: P
Tak, mam ciąg. Użytkownik użyje pliku konfiguracyjnego do wprowadzenia wyrażenia regularnego, a następnie do stylu powiązanego z każdą grupą przechwytywania. Muszę być w stanie przeskanować cały ciąg i uzyskać początek i koniec lub przesunięcie i rozmiar każdego dopasowania grupy.
Więc jeśli użytkownik nie ustawił ([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})
(adres e-mail), a następnie powinny być w stanie uzyskać:
[ ["elliotpotts", 0, 11],
["sample.", 12, 7],
["com", 19, 3] ]
od napisu: "[email protected]"
Jeśli tak nie jest jasne, po prostu coś jest nie tak ze mną: P. Wielkie dzięki, chłopaki, i dziękuję, że jesteście tak cierpliwi!
Właśnie widziałem twoją edycję, przechwytywanie grup ze skanowania są przechowywane w oddzielnych tablicach, po prostu spróbuj wyrażenie regularne i ciąg testowy w irb zobaczysz. Odpowiedzi pozostają takie same z dołączoną edycją. –
Po obejrzeniu kolejnej edycji musisz zaktualizować ją, podając więcej informacji. Jestem trochę zdezorientowany: P Możesz swobodnie wymyślić bardziej kompletny przykład, niezależnie od tego, jak bardzo jest on wymyślny, więc dokładnie wiemy, czego potrzebujesz, aby wyodrębnić –
W porządku, zaktualizowałeś moją odpowiedź, wprowadzając ostatnią zmianę. Jestem teraz trochę związany z czasem, więc jest to kompletne rozwiązanie bez żadnego wyjaśnienia, daj mi znać, jeśli to nie ma sensu, a ja je zaktualizuję. –