![]() |
![]() |
![]() |
![]() |
| |||||||||||||||||||||||
|
![]() |
![]() |
![]() |
Obsługa łańcuchów jest jedną z mocnych stron Perla. Oferuje on duże możliwości w tej dziedzinie. Na początek podam sposób sprawdzania, czy dane wyrażenie występuje czy też nie występuje w przeszukiwanym łańcuchu: $s =~ /Ala/ # wyrażenie to zwróci wartość # prawda, jeżeli okaże się, że # łańcuch $s zawiera szukane # słowo zawarte w pochyłym # nawiasie $s !~ /Ala/ # wyrażenie to zwróci wartość # prawda, jeżeli okaże się, że # łańcuch $s nie zawiera # szukanego słowa zawartego # w pochyłym nawiasie 8.1 Zmienna $_.Nadażyła się dobra okazja, aby przedstawić zmienną $_, która jest domyślną zmienną i na której operuje wiele funkcji wtedy, gdy inna zmienna nie została do konkretnego celu wyszczególniona. Takie rozwiązanie skraca nieco kod oraz eliminuje zbyt dużą liczbę zmiennych i mogące z tego wyniknąć zamieszanie. $s = 'Ala ma kota.'; if ($s =~ /Ala/) { print 'Odnaleziono wyraz Ala!'; } Powyższy zapis jest równoważny następującemu: $_ = 'Ala ma kota.'; if (/Ala/) { print 'Odnaleziono wyraz Ala!'; } 8.2 Maski.Kiedy poszukujemy w danym łańcuchu konkretnego zapisu, korzystamy często z wielu znaków o specjalnym znaczeniu, umieszczanych wewnątrz pochyłego nawiasu. Te znaki to: . # jakikolwiek znak oprócz znaku # nowej linii (\n) ^ # rozpoczęcie nowej linii lub # łańcucha $ # koniec linii lub łańcucha * # dowolna ilość powtórzeń # ostatniego znaku + # jedno lub więcej powtórzeń # ostatniego znaku ? # brak lub jedno wystąpienie # ostatniego znaku Za pomocą powyższych znaków specjalnych można budować maski i porównywać je ze zmiennymi. Oto kilka przykładowych masek: .* # łańcuch składający się z dowolnych # znaków oprócz znaków końca linii ^$ # pusta linia .*x$ # dowolny ciąg znaków, który kończy # się literą "x" Zwykłych nawiasów możemy używać do grupowania znaków: (.*)* # dowolna ilość dowolnych łańcuchów (^$)+ # jedna lub więcej pustych linii (.*x$)* # dowolna ilość łańcuchów # zakończonych literą "x" Jeśli chcemy odnaleźć którykolwiek znak spośród kilku, należy je umieścić w nawiasach kwadratowych. I tak: [abc] # którykolwiek ze znaków: a, b lub c [^abc] # negacja: ani a ani b ani c [a-z] # jakiekolwiek znaki od a do z [^a-z] # jakiekolwiek znaki oprócz # znaków od a do z Nawiasy klamrowe służą do określania ilości powtórzeń wystąpienia łańcucha: (.*){3} # trzy dowolne # łańcuchy (^$){3,} # przynajmniej trzy dowolne # łańcuchy (.*x$){3,5} # przynajmniej trzy, ale nie # więcej niż pięć łańcuchów # zakończonych literą "x" Aby w masce zawrzeć znaki, które mają pierwotnie swoje znaczenie w języku (np. $) należy je poprzedzić znakiem "\". Na przykład: \^ \$ \* Ponadto w masce niektóre litery poprzedzone znakiem "\" nabierają specjalnego znaczenia: \n # znak nowej linii \t # tabulator \a # alarm \l # następny znak ma być małą literą \u # następny znak ma być dużą literą \L # następne znaki mają być małymi # literami, aż do wystąpienia \E \U # następne znaki mają być dużymi # literami, aż do wystąpienia \E \w # pojedynczy znak alfanumeryczny \W # jakikolwiek znak nie będący # znakiem alfanumerycznym \s # spacja \S # jakikolwiek znak, który nie # jest spacją \d # liczba \D # jakikolwiek znak, który nie # jest liczbą Na przykładzie pokażę sposób "wyłuskiwania" pewnych części łańcuchów za pomocą porównywania ich z maskami: $_ = 'linux Operating system'; /([A-Z][a-z]+\s)+/; # wykorzystanie # właściwości zmiennej $_ Po wykonaniu takiej czynności do naszej dyspozycji zostaje oddany szereg pseudo-zmiennych, których wartości można jedynie czytać, ale nie zapisywać. Jak widać maska, której użyliśmy, opisuje słowo "Operating". Z tego względu w zmiennej $& odnajdziemy to słowo. Pod zmienną $` natomiast zapisane zostanie słowo "linux", a pod $' słowo "system". Dzięki temu mechanizmowi jesteśmy w stanie "wyłuskać" potrzebną nam część łańcucha. Przy przeszukiwaniu łańcuchów wszystkie odnalezione wyrażenia zawarte w zwykłych nawiasach są zapamiętywane w pseudo-zmiennych $1, $2, $3, itd. Można je także wykorzystać w ramach aktualnie wykonywanej funkcji odwołując się do nich poprzez \1, \2, \3, itd. $_ = 'Linux Operating System'; if (/(.*ux)/) { print "$1\n"; # znaleziony łańcuch "Linux" } 8.3 Funkcja s///.Bardzo pomocną funkcją wykorzystującą maski jest s///. Służy ona do podmieniania zawartości jednego wyrażenia innym. s/linux/Linux/ # przeszukiwany jest łańcuch # $_, a gdy okaże się, że # zawiera on wyrażenie # "linux", zostanie ono # podmienione na łańcuch # "Linux" s/linux/Linux/g # przeszukiwany jest łańcuch # $_ i wszystkie wystąpienia # wyrażenia "linux" zostaną # podmienione na łańcuch # "Linux" s/linux/Linux/gi # przeszukiwany jest łańcuch # $_ i wszystkie wystąpienia # wyrażenia "linux" # (niezależnie od wielkości # poszczególnych liter) # zostaną podmienione na # łańcuch "Linux" Przykład zastosowania funkcji s///: $_ = 'Linux Operating System'; s/([A-Z])/:\1:/g; # każda pojawiająca # się wielka litera # zostanie zawarta # w dwukropkach 8.4 Funkcja tr///.Do podmieniania znaków innymi znakami służy funkcja tr///. Na przykład: $_ = 'LinuX'; tr/A-Z/a-z/; # podmienienie wszystkich # dużych liter na małe $_ = 'linux'; tr/x/s/; # podmienienie litery "x" na "s" 8.5 Funkcja split().Przydatną funkcją w Perlu jest split. Pozwala ona na rozbicie łańcucha i umieszczenie poszczególnych jego części w tablicy: $s = 'kazik:tomek:marek'; @tab = split(/:/, $s); Po wykonaniu takiej operacji otrzymamy poszczególne części łańcucha, które w $s były odgraniczane znakiem dwukropka, zapisane w kolejnych polach tablicy. Efekt działania funkcji split będzie wyglądał tak: @tab = ("kazik", "tomek", "marek"); Oczywiście w miejsce pojedynczego znaku dwukropka możemy wprowadzić dowolne maski, które będą opisywać wyrażenia oddzielające od siebie szukane łańcuchy. Funkcja split może także być stosowana w krótszej postaci (operować na zmiennej $_): $_ = 'Linux, Operating System'; @tab = split(/.*\s/); W efekcie otrzymamy tablicę @tab składającą się z trzech wyrazów ("Linux", "Operating", "System") zapamiętanych w kolejnych jej polach. 8.6 Funkcja substr().Funkcja substr pozwala na "wycinanie" części łańcucha. Posługując się nią podajemy miejsce, w którym rozpoczyna się szukany wycinek łańcucha i ewentualnie długość tego wycinka. $s = substr('Ala ma kota', 2, 6); ^ ^ # łańcuch $s będzie zawierał "a ma k" $s = substr('Ala ma kota', 6); ^ # łańcuch $s będzie zawierał "kota" $s = substr('Ala ma kota', -4, 3); ^ ^ # łańcuch $s będzie zawierał "kot" ![]() ![]() |
![]() |
![]() |
![]() |
[ zajrzyj... ]
[ zajrzyj... ]
| |||||||||||||||
Kurs pobrano ze strony:
www.BlueMan.aplus.pl