Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen perlrequick komutudur.
Program:
ADI
perlrequick - Perl düzenli ifadeleri hızlı başlangıç
TANIM
Bu sayfa, düzenli ifadeleri anlamanın, oluşturmanın ve kullanmanın temellerini kapsar.
('regex'ler') Perl'de.
The Başlangıç Kılavuzu
Basit sözcük uygun
En basit regex, yalnızca bir kelime veya daha genel olarak bir karakter dizisidir. normal ifade
bir kelimeden oluşan, o kelimeyi içeren herhangi bir dizeyle eşleşir:
"Merhaba Dünya" =~ /Dünya/; # maçlar
Bu açıklamada, "World" bir normal ifadedir ve "/World/" ekindeki "//" Perl'e şunu söyler:
bir eşleşme için bir dize arayın. "=~" operatörü, dizeyi normal ifade eşleşmesiyle ilişkilendirir
ve normal ifade eşleşirse doğru, normal ifade eşleşmediyse false değerini üretir. İçinde
bizim durumumuz, "Dünya", "Merhaba Dünya"daki ikinci kelimeyle eşleşir, bu nedenle ifade doğrudur.
Bu fikrin birkaç varyasyonu var.
Bunun gibi ifadeler koşullu ifadelerde kullanışlıdır:
print "Merhaba Dünya" =~ /World/;
"!~" operatörü kullanılarak eşleşmenin anlamı tersine çevrilebilir:
print "Merhaba Dünya" ise "eşleşmiyor\n" !~ /World/;
Normal ifadedeki değişmez dize bir değişkenle değiştirilebilir:
$tebrik = "Dünya";
print "Merhaba Dünya" =~ /$tebrik/;
$_ ile eşleşiyorsanız, "$_ =~" kısmı atlanabilir:
$_ = "Merhaba Dünya";
/World/ ise "eşleşiyor\n" yazdır;
Son olarak, bir eşleşme için "//" varsayılan sınırlayıcılar, şu şekilde isteğe bağlı sınırlayıcılara değiştirilebilir:
önüne 'm' koyarak:
"Merhaba Dünya" =~ m!Dünya!; '!' ile sınırlandırılmış # eşleşme
"Merhaba Dünya" =~ m{Dünya}; # eşleşme, eşleşen '{}' ifadesini not edin
"/usr/bin/Perl" =~ m"/perl"; # 'den sonra eşleşir/ Usr / bin',
# '/' sıradan bir karakter olur
Normal ifadeler, dizenin bir bölümüyle eşleşmelidir kesinlikle ifadenin doğru olması için:
"Merhaba Dünya" =~ /dünya/; # eşleşmiyor, büyük/küçük harfe duyarlı
"Merhaba Dünya" =~ /o W/; # eşleşir, '' sıradan bir karakterdir
"Merhaba Dünya" =~ /Dünya /; # eşleşmiyor, sonunda ' ' yok
Perl her zaman dizgede mümkün olan en erken noktada eşleşir:
"Merhaba Dünya" =~ /o/; # 'Merhaba'daki 'o' ile eşleşir
"Şapka kırmızı" =~ /hat/; # 'O'da 'şapka' ile eşleşir
Bir maçta tüm karakterler 'olduğu gibi' kullanılamaz. denilen bazı karakterler
meta, normal ifade gösteriminde kullanılmak üzere ayrılmıştır. Meta karakterler
{}[]()^$.|*+?\
Bir meta karakter, önüne ters eğik çizgi koyarak eşleştirilebilir:
"2+2=4" =~ /2+2/; # eşleşmiyor, + bir meta karakter
"2+2=4" =~ /2\+2/; # eşleşme, \+ sıradan bir + gibi ele alınır
'C:\WIN32' =~ /C:\\WIN/; # maçlar
"/usr/bin/Perl" =~ /\/ usr\/çöp Kutusu\/perl/; # maçlar
Son normal ifadede, eğik çizgi '/' da ters eğik çizgidir, çünkü
normal ifadeyi sınırlayın.
Yazdırılamayan ASCII karakterleri ile temsil edilir kaçış dizileri. Ortak örnekler
Sekme için "\t", yeni satır için "\n" ve satır başı için "\r". keyfi baytlar
sekizli kaçış dizileriyle temsil edilir, örneğin, "\033" veya onaltılık kaçış dizileri,
örneğin, "\x1B":
"1000\t2000" =~ m(0\t2) # eşleşme
"cat" =~ /\143\x61\x74/ # ASCII ile eşleşir, ancak
# kediyi hecelemenin tuhaf bir yolu
Normal ifadeler çoğunlukla çift tırnaklı dizeler olarak ele alınır, bu nedenle değişken ikamesi işe yarar:
$foo = 'ev';
'kedi evi' =~ /kedi$foo/; # maçlar
'ev kedisi' =~ /${foo}kedi/; # maçlar
Yukarıdaki tüm normal ifadelerde, normal ifade dizenin herhangi bir yerinde eşleşirse,
maç sayılır. belirtmek için nerede eşleşmeli, kullanırdık çapa
meta karakterler "^" ve "$". Çapa "^", dizenin başındaki eşleşme anlamına gelir ve
"$" bağlantısı, dizenin sonundaki veya sonundaki yeni satırdan önceki eşleşme anlamına gelir.
sicim. Bazı örnekler:
"kahya" =~ /bekçi/; # maçlar
"kahya" =~ /^bekçi/; # eşleşmiyor
"kahya" =~ /bekçi$/; # maçlar
"kahya\n" =~ /keeper$/; # maçlar
"kahya" =~ /^kahya$/; # maçlar
kullanma karakter sınıflar
A karakter sınıf tek bir karakter yerine bir dizi olası karaktere izin verir.
karakter, bir normal ifadede belirli bir noktada eşleşmek için. Karakter sınıfları ile gösterilir
parantezler "[...]", içinde muhtemelen eşleştirilecek karakter kümesiyle. İşte bazıları
Örnekler:
/kedi/; # 'kedi' ile eşleşir
/[bcr]at/; # 'yarasa', 'kedi' veya 'sıçan' ile eşleşir
"abc" =~ /[kabin]/; # 'a' ile eşleşir
Son ifadede, 'c' sınıftaki ilk karakter olmasına rağmen, en erken
normal ifadenin eşleşebileceği nokta 'a'dır.
/[yY][eE][sS]/; # 'evet' ile büyük/küçük harfe duyarsız bir şekilde eşleştirin
# 'evet', 'Evet', 'EVET' vb.
/Evet ben; # ayrıca 'evet' ile büyük/küçük harfe duyarsız bir şekilde eşleşir
Son örnek, 'i' ile bir eşleşmeyi gösterir. niteleyici, ki bu maç durumunu-
duyarsız.
Karakter sınıfları da sıradan ve özel karakterlere sahiptir, ancak sıradan ve
bir karakter sınıfının içindeki özel karakterler, bir karakterin dışındakilerden farklıdır
sınıf. Bir karakter sınıfı için özel karakterler "-]\^$" şeklindedir ve bir karakter kullanılarak eşleştirilir.
kaçmak:
/[\]c]def/; # ']def' veya 'cdef' ile eşleşir
$x = 'bcr';
/[$x]at/; # 'yarasa', 'kedi' veya 'sıçan' ile eşleşir
/[\$x]at/; # '$at' veya 'xat' ile eşleşir
/[\\$x]at/; # '\at', 'yarasa', 'kedi' veya 'sıçan' ile eşleşir
'-' özel karakteri, karakter sınıfları içinde bir aralık operatörü görevi görür, böylece
hantal "[0123456789]" ve "[abc...xyz]", "[0-9]" ve "[az]" zarif olur:
/item[0-9]/; # 'item0' veya ... veya 'item9' ile eşleşiyor
/[0-9a-fA-F]/; # bir onaltılık basamakla eşleşir
'-' bir karakter sınıfındaki ilk veya son karakterse, sıradan bir karakter olarak kabul edilir.
karakter.
Bir karakter sınıfının ilk konumundaki özel karakter "^", bir Terslenmis
karakter sınıfparantez içindekiler dışında herhangi bir karakterle eşleşen . İkisi ve
"[^...]" bir karakterle eşleşmelidir, aksi takdirde eşleşme başarısız olur. Sonra
/[^a]at/; # 'aat' veya 'at' ile eşleşmiyor, ancak eşleşiyor
# diğer tüm 'yarasa', 'kedi, '0at', '%at' vb.
/[^0-9]/; # sayısal olmayan bir karakterle eşleşir
/[a^]at/; # 'aat' veya '^at' ile eşleşir; burada '^' sıradan
Perl, ortak karakter sınıfları için birkaç kısaltmaya sahiptir. (Bu tanımlar,
Perl'in "/a" değiştiricisiyle ASCII güvenli kipte kullandığı. Aksi takdirde birçok kişiyle eşleşebilirler
daha fazla ASCII olmayan Unicode karakter. Perlrecharclass'ta "Ters eğik çizgi dizileri" konusuna bakın
detaylar için.)
· \d bir rakamdır ve temsil eder
[0-9]
· \s bir boşluk karakteridir ve temsil eder
[\ \t\r\n\f]
· \w bir kelime karakteridir (alfanümerik veya _) ve temsil eder
[0-9a-zA-Z_]
· \D olumsuzlanmış bir \d'dir; bir rakam dışında herhangi bir karakteri temsil eder
[^0-9]
· \S olumsuzlanmış bir \s'dir; boşluk olmayan herhangi bir karakteri temsil eder
[^\s]
· \W olumsuzlanmış bir \w'dir; herhangi bir kelime olmayan karakteri temsil eder
[^\w]
· Periyot '.' "\n" dışında herhangi bir karakterle eşleşir
"\d\s\w\D\S\W" kısaltmaları hem karakter sınıflarının içinde hem de dışında kullanılabilir.
İşte kullanımda olanlardan bazıları:
/\d\d:\d\d:\d\d/; # ss:dd:ss saat biçimiyle eşleşir
/[\d\s]/; # herhangi bir rakam veya boşluk karakteriyle eşleşir
/\w\W\w/; # bir kelime karakteriyle eşleşir, ardından bir
# kelime dışı karakter, ardından bir kelime karakter
/..rt/; # herhangi iki karakterle eşleşir, ardından 'rt' gelir
/son\./; # 'bitiş' ile eşleşir.
/son[.]/; # aynı şey, 'bitiş' ile eşleşir.
The sözcük çapa "\b", bir sözcük karakteri ile sözcük olmayan bir karakter arasındaki sınırla eşleşir
"\w\W" veya "\W\w":
$x = "Housecat, evi ve kediyi kiralar";
$x =~ /\bcat/; # 'catenates' içindeki cat ile eşleşir
$x =~ /cat\b/; # 'ev kedisi'ndeki kediyle eşleşir
$x =~ /\bcat\b/; # dizenin sonundaki 'kedi' ile eşleşir
Son örnekte, dizenin sonu bir sözcük sınırı olarak kabul edilir.
Doğal dil işleme için (örneğin, kesme işaretleri kelimelere dahil edilecek şekilde),
bunun yerine "\b{wb}" kullanın
"yapma" =~ / .+? \b{wb} /x; # tüm dizeyle eşleşir
Uygun Re-Tweet or o
Farklı karakter dizilerini aşağıdakilerle eşleştirebiliriz: nöbetleşme meta karakter '|'. Eşleştirmek
"dog" veya "cat", normal ifadeyi "dog|cat" oluştururuz. Daha önce olduğu gibi, Perl normal ifadeyi eşleştirmeye çalışacak
dizedeki mümkün olan en erken noktada. Her karakter pozisyonunda, Perl önce
ilk alternatif olan "köpek" ile eşleşmeye çalışın. "Köpek" eşleşmezse, Perl bunu deneyecektir.
sonraki alternatif, "kedi". "Kedi" de eşleşmezse, eşleşme başarısız olur ve Perl
dizide bir sonraki konuma geçer. Bazı örnekler:
"kediler ve köpekler" =~ /cat|dog|kuş/; # "kedi" ile eşleşir
"kediler ve köpekler" =~ /köpek|kedi|kuş/; # "kedi" ile eşleşir
İkinci normal ifadede "köpek" ilk alternatif olsa da, "kedi" eşleşebilir
dizede daha önce.
"kediler" =~ /c|ca|cat|kediler/; # "c" ile eşleşir
"kediler" =~ /kediler|kedi|ca|c/; # "kediler" ile eşleşir
Belirli bir karakter konumunda, normal ifadenin eşleşmesine izin veren ilk alternatif
başarılı olan eşleşir. Burada tüm alternatifler ilk dizgede eşleşir.
konum, yani ilk eşleşmeler.
Gruplama işler ve hiyerarşik uygun
The gruplama metakarakterler "()", bir normal ifadenin bir bölümünün tek bir birim olarak ele alınmasına izin verir.
Normal ifadenin parçaları, parantez içine alınarak gruplandırılır. normal ifade
"house(cat|keeper)", "house" ve ardından "kedi" veya "bekçi" ile eşleşme anlamına gelir. Biraz daha
örnekler
/(a|b)b/; # 'ab' veya 'bb' ile eşleşir
/(^a|b)c/; # dizenin başlangıcındaki 'ac' veya herhangi bir yerde 'bc' ile eşleşir
/ev(kedi|)/; # "ev kedisi" veya "ev" ile eşleşir
/house(kedi(ler)|)/; # 'ev kedileri' veya 'ev kedisi' ile eşleşir veya
# 'ev'. Not grupları iç içe yerleştirilebilir.
"20" =~ /(19|20|)\d\d/; # '()\d\d' boş alternatifiyle eşleşir,
# çünkü '20\d\d' eşleşemez
Ayıklanıyor maçlar
"()" gruplandırma meta karakterleri, aynı zamanda bir dizgenin
eşleşti. Her gruplama için içeride eşleşen kısım özel değişkenlere girer.
$1, $2, vb. Sıradan değişkenler olarak kullanılabilirler:
# saat, dakika, saniye ayıkla
$zaman =~ /(\d\d):(\d\d):(\d\d)/; # ss:dd:ss biçimiyle eşleşir
$saat = $1;
$dakika = $2;
$saniye = $3;
Liste bağlamında, gruplamalarla "/regex/" eşleşmesi, eşleşen değerlerin listesini döndürür
"($1,$2,...)". Böylece yeniden yazabiliriz
($saat, $dakika, $saniye) = ($zaman =~ /(\d\d):(\d\d):(\d\d)/);
Normal ifadedeki gruplamalar iç içeyse, $1 en soldaki açıklığa sahip grubu alır
parantez, sonraki açılış parantezi 2$, vb. Örneğin, burada karmaşık bir normal ifade
ve altında belirtilen eşleşen değişkenler:
/(ab(cd|ef)((gi)|j))/;
+1 2 34
Eşleşen değişkenler $1, $2, ... ile ilişkili geribaşvurularla "\g1", "\g2",
... Geri referanslar, kullanılabilecek eşleşen değişkenlerdir içeride normal ifade:
/(\w\w\w)\s\g1/; # dizedeki 'the' gibi dizileri bul
$1, $2, ... yalnızca bir normal ifadenin dışında ve "\g1", "\g2", ... yalnızca bir normal ifadenin içinde kullanılmalıdır.
normal ifade.
Uygun provalar
The ölçmek "?", "*", "+" ve "{}" metakarakterleri,
bir eşleşme olarak kabul ettiğimiz bir normal ifadenin bir bölümünün tekrarları. niceleyiciler konur
belirtmek istediğimiz karakterin, karakter sınıfının veya gruplamanın hemen ardından.
Aşağıdaki anlamlara sahiptirler:
· "a?" = 'a' ile 1 veya 0 kez eşleşir
· "a*" = 'a' ile 0 veya daha fazla kez eşleşir, yani herhangi bir sayıda
· "a+" = 'a' ile 1 veya daha fazla kez eşleşir, yani en az bir kez
· "a{n,m}" = en az "n" kez eşleştir, ancak "m" kereden fazla değil.
· "a{n,}" = en az "n" veya daha fazla eşleşme
· "a{n}" = "n" ile tam olarak eşleşir
İşte bazı örnekler:
/[az]+\s+\d*/; # küçük harfli bir sözcükle, en azından biraz boşlukla eşleştirin ve
# herhangi bir sayıda basamak
/(\w+)\s+\g1/; # keyfi uzunluktaki iki katına çıkan kelimeleri eşleştir
$yıl =~ /^\d{2,4}$/; # yılın en az 2 olduğundan emin olun, ancak daha fazla değil
# 4 basamaktan fazla
$yıl =~ /^\d{4}$|^\d{2}$/; # daha iyi eşleşme; 3 basamaklı tarihleri atmak
Bu niceleyiciler, dizenin mümkün olduğu kadar çoğunu eşleştirmeye çalışacaktır, ancak yine de
regex'in eşleşmesine izin verir. Böylece sahibiz
$x = 'şapkadaki kedi';
$x =~ /^(.*)(at)(.*)$/; # maçlar,
# $1 = 'h'deki kedi'
# $2 = 'at'
# $3 = '' (0 eşleşme)
İlk niceleyici ".*", hala sahipken dizenin mümkün olduğunca çoğunu alır.
normal ifade eşleşmesi. İkinci niceleyici ".*" için dize kalmadı, bu nedenle 0 kez eşleşiyor.
Daha Fazla uygun
Eşleştirme operatörleri hakkında bilmek isteyebileceğiniz birkaç şey daha var. Küresel
"//g" değiştiricisi, eşleşen operatörün bir dize içinde mümkün olduğu kadar çok kez eşleşmesine izin verir.
mümkün. Skaler bağlamda, bir dizgeye karşı ardışık eşleşmelerde "//g" atlama olur
Maçtan maça, ilerledikçe dizideki konumu takip etmek. Yapabilirsiniz
"pos()" işleviyle konumu alın veya ayarlayın. Örneğin,
$x = "kedi köpek evi"; # 3 kelime
iken ($x =~ /(\w+)/g) {
print "Kelime $1, bitiyor ", pos $x, "\n";
}
baskılar
Kelime kedidir, 3. konumda biter
Kelime köpektir, 7. pozisyonda biter
Kelime evdir, 13. pozisyonda biter
Başarısız bir eşleşme veya hedef dizenin değiştirilmesi konumu sıfırlar. eğer istemiyorsan
eşleşme hatasından sonra konum sıfırlama, "//c"yi "/regex/gc"de olduğu gibi ekleyin.
Liste bağlamında, "//g" eşleşen gruplamaların bir listesini döndürür veya gruplama yoksa,
tüm normal ifadeyle eşleşmelerin bir listesi. Yani
@kelimeler = ($x =~ /(\w+)/g); # maçlar,
# $word[0] = 'kedi'
# $word[1] = 'köpek'
# $word[2] = 'ev'
Ara ve değiştirmek
Arama ve değiştirme, "s/regex/replacement/modifiers" kullanılarak gerçekleştirilir. "değiştirme"
ile eşleşen her şeyi dizede değiştiren bir Perl çift tırnaklı dizedir.
"normal ifade". "=~" operatörü burada ayrıca bir dizgiyi "s///" ile ilişkilendirmek için de kullanılır. Eğer
$_ ile eşleşirse, "$_ =~" bırakılabilir. Bir eşleşme varsa, "s///",
yapılan değişiklik sayısı; aksi halde false döndürür. İşte birkaç örnek:
$x = "Kedi besleme zamanı!";
$x =~ s/cat/hacker/; # $x, "Bilgisayar korsanını besleme zamanı!"
$y = "'alıntılanan kelimeler'";
$y =~ s/^'(.*)'$/$1/; # tek tırnakları şeritleyin,
# $y "alıntılanan kelimeler" içeriyor
"s///" operatörüyle, eşleşen $1, $2, vb. değişkenler hemen kullanılabilir hale gelir
değiştirme ifadesinde kullanım için. Global değiştirici ile "s///g" arama yapacak ve
dizedeki regex'in tüm oluşumlarını değiştirin:
$x = "4'e 4 vurdum";
$x =~ s/4/dört/; # $x, "4'e dört vurdum" ifadesini içeriyor
$x = "4'e 4 vurdum";
$x =~ s/4/dört/g; # $x, "dörde dörde vurdum" ifadesini içeriyor
Tahribatsız değiştirici "s///r", ikame sonucunun döndürülmesine neden olur
$_ (veya ikamenin "=~" ile bağlı olduğu değişkeni) değiştirmek yerine:
$x = "Köpekleri severim.";
$y = $x =~ s/köpekler/kediler/r;
"$x $y\n" yazdır; # "Köpekleri severim. Kedileri severim." yazdırır.
$x = "Kediler harikadır.";
yazdır $x =~ s/Kediler/Köpekler/r =~ s/Köpekler/Kurbağalar/r =~
s/Frogs/Hedgehogs/r, "\n";
# "Kirpiler harikadır" yazdırır.
@foo = harita { s/[az]/X/r } qw(abc 1 2 3);
# @foo artık qw(XXX 1 2 3)
"s///e" değerlendirme değiştiricisi, değiştirme dizesinin etrafına bir "değerlendirme{...}" sarar ve
değerlendirilen sonuç, eşleşen alt dize için değiştirilir. Bazı örnekler:
# bir dizgedeki tüm kelimeleri tersine çevir
$x = "şapkadaki kedi";
$x =~ s/(\w+)/ters $1/ge; # $x "eht tac ni eht tah" içeriyor
# yüzdeyi ondalık sayıya çevir
$x = "%39 isabet oranı";
$x =~ s!(\d+)%!$1/100!e; # $x "0.39 isabet oranı" içeriyor
Son örnek, "s///" öğesinin "s!!!" gibi diğer sınırlayıcıları kullanabileceğini gösterir. ve "s{}{}",
ve hatta "s{}//". Tek tırnak "s'''" kullanılıyorsa, normal ifade ve değiştirme
tek tırnaklı dizeler olarak ele alınır.
The bölmek Şebeke
"split /regex/, string", "dize"yi bir alt dizeler listesine böler ve bu listeyi döndürür.
Normal ifade, "dize"nin bölündüğü karakter dizisini belirler. İçin
örneğin, bir dizeyi kelimelere bölmek için şunu kullanın:
$x = "Calvin ve Hobbes";
@kelime = böl /\s+/, $x; # $word[0] = 'Calvin'
# $kelime[1] = 've'
# $word[2] = 'Hobblar'
Virgülle ayrılmış bir sayı listesi çıkarmak için şunu kullanın:
$x = "1.618,2.718, 3.142";
@const = böl /,\s*/, $x; # $const[0] = '1.618'
# $const[1] = '2.718'
# $const[2] = '3.142'
Boş regex "//" kullanılırsa, dize tek tek karakterlere bölünür. Eğer
regex'in gruplamaları vardır, ardından üretilen liste, eşleşen alt dizeleri içerir.
gruplamalar da:
$x = "/ Usr / bin";
@parçalar = böl m!(/)!, $x; # $parça[0] = ''
# $parça[1] = '/'
# $parça[2] = 'usr'
# $parça[3] = '/'
# $parça[4] = 'bin'
$x'in ilk karakteri normal ifadeyle eşleştiğinden, "split" başına boş bir baş
listeye eleman.
"kullanmak re 'sıkı'"
v5.22'de yeni olan bu özellik, normal ifadeyi derlerken normalde olduğundan daha katı kurallar uygular
desenler. Yasal olsa da, istediğiniz gibi olmayabilecek şeyler bulabilir.
Yeniden 'katı' bakın.
onworks.net hizmetlerini kullanarak perlrequick'i çevrimiçi kullanın