2011-12-10 17 views
10

Próbuję utworzyć zapytanie dopasowania, które wybiera tekst z ciągu między dwoma słowami. Nie potrafię wymyślić, jak sprawić, aby wyszukiwarka była niewrażliwa. Na przykład rozważyć tekst:Ruby string match ignore case

contents = "cat 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec blandit feugiat mi, eu lacinia quam tincidunt eu. Donec eleifend adipiscing neque, in porta dolor vestibulum at. Curabitur id elit vitae nunc feugiat varius. Maecenas euismod euismod mi, eu blandit lectus. 
dog" 

kod Ruby, aby powrócić mi kod latin między kotem słowa i pies jest

contents.match(/cat(.*)dog/m)[1].strip 

W tej chwili moim „mecz” kwerenda działa tylko wtedy, gdy kot a pies jest małymi literami, ale muszę się przygotować, jeśli kot i pies są wielkie lub pierwsza litera jest wielka.

Nie jestem pewien, gdzie przykleić operator/i.

Odpowiedz

19

Obok „m”:

contents.match(/cat(.*)dog/im)[1].strip 
+0

ja nawet nie myśleć „m” robi coś w tym wyrażeniu. "m" służy do tego, aby '^' i '$' dopasować początek/koniec linii, a nie początek/koniec danych wejściowych. – d11wtq

+1

@ d11wtq - Właśnie wypróbowałem to w irb i to wydaje się robić różnicę. Wierzę, że pozwala. postać, która pasuje do nowych linii. –

+0

dzięki @coder_tim, nie zdawałem sobie sprawy, że to było takie proste. – ekynox