Perl/Opis wyrażeń regularnych

Z Wikibooks, biblioteki wolnych podręczników.

Wyrażenia regularne z przykładami w Perlu[edytuj]

Znak Opis Przykład


Wszystkie instrukcje warunkowe if są wykonywane

. Dopasowuje każdy znak poza znakiem nowej linii.
$string1 = "Hello World\n";
if ($string1 =~ m/...../) {
print "$string1 ma długość większą od 5\n";
}
( ) Grupuje fragment wyrażenia jako pojedynczy element. Jeśli taki fragment zostanie dopasowany, jego wartość znajdzie się w zmiennych $1, $2, $3...
$string1 = "Hello World\n";
if ($string1 =~ m/(H..).(o..)/) {
print "Dopasowało '$1' oraz '$2'\n";
}
Wynik:
Dopasowało 'Hel' oraz 'o W';
+ Poprzedzający element musi być dopasowany 1 lub więcej razy
$string1 = "Hello World\n";
if ($string1 =~ m/l+/) {
print "Występuje jedno lub więcej liter l obok siebie w $string1\n";
}
? Poprzedzający element ma być dopasowany 0 lub 1 raz
$string1 = "Hello World\n";
if ($string1 =~ m/H.?e/) {
print "Występują 'H' oraz 'e' odseparowane ";
print "żadnym lub jednym znakiem (Np.: He Hoe)\n";
}
? Użyty po *, + lub {M,N}, sprawia, że to dopasowanie jest nie-zachłanne (dopasowuje jak najmniejszą liczbę razy)
$string1 = "Hello World\n";
if ($string1 =~ m/(l+?o)/) {
print "Dopasowane zostanie 'lo', a nie 'llo'.\n"
}
* Poprzedzający element ma być dopasowany 0 lub więcej razy
$string1 = "Hello World\n";
if ($string =~ m/el*o/) {
print "Pomiędzy 'e', a 'o' jest zero lub ";
print "więcej liter 'l' (eo, elo, ello, elllo)\n";
}
{M,N} Poprzedzający element musi być dopasowany od M do N razy
$string1 = "Hello World\n";
if ($string1 =~ m/l{1,2}/) {
print "Znalazłem podciąg o co najmniej jednej literze l, a najwięcej dwóch.\n";
}
[...] Zawiera zbiór możliwych znaków. Dopasowuje dowolny z nich.
$string1 = "Hello World\n";
if ($string1 =~ m/[aeiou]+/) {
print "$string1 zawiera jedną lub więcej samogłosek\n";
}
[^...] Dopasowuje każdy znak poza tymi między nawiasami kwadratowymi
$string = "Sky.";
unless($string =~ /[aeiouy]/) {
print "$string nie zawiera żadnych samogłosek\n";
}
| Dopasowuje albo element po lewej, albo po prawej
$string1 = "Hello World\n";
if ($string1 =~ m/(Hello|Hi)/) {
print "$string1 zawiera Hello albo Hi\n";
}
\b Dopasowuje podział między wyrazami
$string1 = "Hello World\n";
if ($string1 =~ m/ello?\b/) {
print "Znalazłem słowo zakończone na 'ello'\n";
} else {
print "Nie znalazłem słów zakończonych na 'ello'\n";
}
\w Dopasowuje litery, cyfry oraz "_"
$string1 = "Hello World\n";
if ($string1 =~ m/\w/) {
print "Tekst zawiera conajmniej jeden znak alfanumeryczny\n";
}
\W Dopasowuje znak nie bedący literą ani cyfrą
$string1 = "Hello World\n";
if ($string1 =~ m/\W/) {
print "Odstęp między Hello a World nie jest literą ani cyfrą\n";
}
\s Dopasowuje biały znak (spacja, tabulator, nowa linia)
$string1 = "Hello World\n";
if ($string1 =~ m/\s.*\s/) {
print "Znalazłem 2 białe znaki rozdzielone innymi znakami w $string1\n";
}
\S Dopasowuje każdy znak poza białymi znakami
$string1 = "Hello World\n";
if ($string1 =~ m/\S.*\S/) {
print "Znalazłem 2 nie-białe znaki rozdzielone innymi znakami w $string1\n";
}
\d Dopasowuje cyfrę, dokładnie jak [0-9]
$string1 = "99 bottles of beer on the wall.";
if ($string1 =~ m/(\d+)/) {
print "$1 jest pierwszą liczbą w '$string1'\n";
}
Wynik:
99 jest pierwszą liczbą w '99 bottles of beer on the wall.'
\D Dopasowuje znak nie będący cyfrą
$string1 = "Hello World\n";
if ($string1 =~ m/\D/) {
print "W $string1 występuje przynajmniej 1 znak nie będący cyfrą.\n";
}
^ Dopasowuje początek linii albo tekstu
$string1 = "Hello World\n";
if ($string1 =~ m/^He/) {
print "$string1 zaczyna się znakami 'He'\n";
}
$ Dopasowuje koniec linii albo tekstu
$string1 = "Hello World\n";
if ($string1 =~ m/rld$/) {
print "$string1 kończy się znakami 'rld'\n";
}