Ciao, non uso ruby (per cui vado a testare su repl) ma ho un po' di dimestichezza con le regex.
Cerco di rispondere alle tue domande.
- Punto 1:
Hai utilizzato l'opzione "i" che sta per "Case Insensitive" (o "Ignore Case"), per cui nella ricerca vengono considerate indistintamente sia minuscole che maiuscole, anche se hai specificato di cercare solo lettere minuscole.
Per avere una ricerca Case Sensitive basta omettere tale opzione:
=> nessuna occorrenza trovata (Comedy ha un carattere mauiscolo)codice:puts "11::American President, The (1995)::Comedy|Drama|Romance"[/\)::([a-z]+)\|/,1]
=> viene trovato: comedy (ha solo caratteri minuscoli)codice:puts "11::American President, The (1995)::comedy|Drama|Romance"[/\)::([a-z]+)\|/,1]- Punto 2:
Sul pattern, utilizzando le parentesi tonde, vai a specificare un gruppo dove sono comprese le sole lettere dell'eventuale occorrenza trovata ([a-z]+).
Per tale motivo, specificando l'indice 1, otterrai il contenuto del primo gruppo trovato, cioè solo la parte con le lettere.
Se vuoi ottenere l'intera stringa dovrai raggrupparla per intero:
=> viene trovato: )::comedy|codice:puts "11::American President, The (1995)::comedy|Drama|Romance"[/(\)::[a-z]+\|)/,1]
Oppure, in questo caso, puoi prendere il risultato per intero senza bisogno di utilizzare gruppi:
=> dovrebbe restituire sempre: )::comedy|codice:puts "11::American President, The (1995)::comedy|Drama|Romance"[/\)::[a-z]+\|/]