Ruby/Wyrażenia regularne: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje) |
Szymon wro (dyskusja | edycje) |
||
Linia 46:
Wspólny termin określający wzory które używają tego dziwnych symboli to wyrażenia regularne. W Rubim tak samo jak w Perlu są one zazwyczaj otoczone raczej przez ukośniki niż przez cudzysłowy. Jeżeli nigdy wcześniej nie pracowałeś z wyrażeniami regularnymi, prawdopodobnie wyglądają jak wszystko inne ale nie jak coś regularnego, nie mniej powinieneś być sprytny i poświęcić trochę czasu by się z nimi zaznajomić. Wyrażenia regularne mają skutecznie ekspresywną moc, która oszczędzi ci bólów głowy (i wielu linii kodu) niezależnie od tego, czy potrzebujesz dopasowywania wzorców, wyszukiwania czy też innego manipulowania łańcuchami.
Dla przykładu, przypuśćmy, że chcemy sprawdzić czy łańcuch pasuje do tego opisu: "Zaczyna się małą literą ''f'', po której zaraz następuje jedna duża litera i opcjonalnie jakieś inne znaki, aż do wystąpienia innych innych małych liter." Jeżeli jesteś doświadczonym programistą C, prawdopodobnie już
A co z "Zawiera heksadecymalny numer w ostrych nawiasach"? Żaden problem.
<pre>
ruby> def chab(s) # "
| (s =~ /<0(x|X)(\d|[a-f]|[A-F])+>/) != nil
| end
Linia 57:
ruby> chab "Not this one."
false
ruby> chab "Maybe this? {0x35}" #
false
ruby> chab "Or this? <0x38z7e>" #
false
ruby> chab "Okay, this: <0xfc0004>."
Linia 67:
Chociaż wyrażenia regularne mogą wydawać się zagadkowe przy pierwszym spojrzeniu, z pewnością szybko osiągniesz satysfakcję z możliwości wyrażania się tak ekonomicznie.
<pre>
# Wymaga terminala ANSI!
st = "\033[7m"
Linia 84 ⟶ 85:
puts str.gsub(re,"#{st}\\&#{en}")
end
</pre>
Program wymaga dwukrotnego wprowadzenia danych, raz oczekuje na łańcuch tekstowy a raz na wyrażenie regularne. Łańcuch jest sprawdzany pod kątem występowania wyrażenia regularnego, następnie wypisywany z podświetlonymi wszystkimi pasującymi fragmentami. Nie analizuj teraz szczegółów; analiza tego kodu wkrótce się pojawi.
<pre>
str> foobar
pat> ^fo+
foobar
~~~
</pre>
Znaki tyldy oznaczają podświetlony tekst na wyjściu programu.
Wypróbujmy kilka innych tekstów.
</pre>
str> abc012dbcd555
pat> \d
abc012dbcd555
[[Wikipedysta:
</pre>
If that surprised you, refer to the table at the top of this page: \d has no relationship to the character d, but rather matches a single digit.
|