perlrecharclass - Bulutta Çevrimiçi

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 perlrecharclass komutudur.

Program:

ADI


perlrecharclass - Perl Normal İfade Karakter Sınıfları

AÇIKLAMA


Perl düzenli ifadeleriyle ilgili en üst düzey belgeler perlre'de bulunur.

Bu kılavuz sayfası, Perl normal dilinde karakter sınıflarının sözdizimini ve kullanımını tartışır.
ifade.

Bir karakter sınıfı, bir karakter kümesini öyle bir şekilde belirtmenin bir yoludur ki,
kümenin karakteri eşleştirilir. Şunu hatırlamak önemlidir: bir karakterle eşleşme
class, kaynak dizede tam olarak bir karakter tüketir. (Kaynak dize,
normal ifadenin eşleştirildiği dize.)

Perl düzenli ifadelerinde üç tür karakter sınıfı vardır: nokta, ters eğik çizgi
diziler ve köşeli parantez içindeki form. Yine de unutmayın, çoğu zaman
"karakter sınıfı" terimi sadece parantez içindeki formu ifade etmek için kullanılır. Kesinlikle, çoğu Perl
belgeler bunu yapar.

The nokta
Nokta (veya nokta), "." muhtemelen en çok kullanılan ve kesinlikle en iyi bilinenidir.
karakter sınıfı. Varsayılan olarak, bir nokta, yeni satır dışında herhangi bir karakterle eşleşir. o
varsayılanı kullanarak yeni satırla eşleşen eklemek için değiştirilebilir. tek hat değiştirici:
"/s" değiştiricili tüm normal ifade için veya yerel olarak "(?s)" ile.
(Aşağıda açıklanan "\N" ters eğik çizgi dizisi, yeni satır dışında herhangi bir karakterle eşleşir.
dikkate alınmadan tek hat değiştirici.)

İşte bazı örnekler:

"bir" =~ /./ # Kibrit
"." =~ /./ # Kibrit
"" =~ /./ # Eşleşme yok (nokta bir karakterle eşleşmelidir)
"\n" =~ /./ # Eşleşme yok (nokta yeni satırla eşleşmiyor)
"\n" =~ /./s # Eşleşme (genel 'tek satır' değiştirici)
"\n" =~ /(?s:.)/ # Eşleşme (yerel 'tek satır' değiştirici)
"ab" =~ /^.$/ # Eşleşme yok (nokta bir karakterle eşleşir)

backslash dizileri
Ters eğik çizgi dizisi, ilki ters eğik çizgi olan bir karakter dizisidir.
Perl, bu tür birçok diziye özel anlamlar yükler ve bunlardan bazıları karakterdir.
sınıflar. Yani, karakterin ait olması koşuluyla, her biri tek bir karakterle eşleşirler.
dizi tarafından tanımlanan belirli karakter kümesine.

İşte karakter sınıfları olan ters eğik çizgi dizilerinin bir listesi. onlar tartışılır
aşağıda daha ayrıntılı olarak. (Karakter sınıfı olmayan ters eğik çizgi dizileri için bkz.
ters eğik çizgi.)

\d Bir ondalık basamak karakteriyle eşleşir.
\D Ondalık olmayan bir karakterle eşleştirin.
\w Bir "kelime" karakterini eşleştirin.
\W "Kelime" olmayan bir karakterle eşleştirin.
\s Bir boşluk karakteriyle eşleşir.
\S Boşluk olmayan bir karakterle eşleşir.
\h Yatay bir boşluk karakteriyle eşleştirin.
\H Yatay boşluk olmayan bir karakter eşleştirin.
\v Dikey bir boşluk karakteriyle eşleştirin.
\V Dikey boşluk olmayan bir karakter eşleştirin.
\N Yeni satır olmayan bir karakter eşleştirin.
\pP, \p{Prop} Verilen Unicode özelliğine sahip bir karakter eşleştirin.
\PP, \P{Prop} Unicode özelliğine sahip olmayan bir karakter eşleştir

\N

v5.12'den itibaren mevcut olan "\N", nokta gibi bir karakter olmayan herhangi bir karakterle eşleşir.
Yeni hat. Aradaki fark, "\N"nin aşağıdakilerden etkilenmemesidir. tek hat düzenli
ifade değiştirici (yukarıdaki "nokta" konusuna bakın). "\N{...}" biçiminin şu anlama gelebileceğini unutmayın:
tamamen farklı bir şey. "{...}" bir niceleyici olduğunda,
birçok kez yeni satır olmayan karakter. Örneğin, "\N{3}", 3 olmayanla eşleşmek anlamına gelir.
yeni satırlar; "\N{5,}", 5 veya daha fazla yeni satır olmayanla eşleşmek anlamına gelir. Ancak "{...}" yasal değilse
niceleyici, adlandırılmış bir karakter olduğu varsayılır. Bunlar için karakter adlarına bakın. İçin
örneğin, "\N{KOLON}", "\N{4F}" ve "\N{F4}" öğelerinden hiçbiri yasal niceleyici içermez, bu nedenle Perl
adları sırasıyla "KOLON", "4F" ve "F4" olan karakterleri bulmaya çalışacaktır.

Rakamlar

"\d", ondalık sayı olarak kabul edilen tek bir karakterle eşleşir basamak. "/a" düzenli ise
ifade değiştirici etkin, [0-9] ile eşleşiyor. Aksi takdirde, herhangi bir şeyle eşleşir
[0-9] içeren "\p{Rakam}" ile eşleştirilir. (Muhtemel olası bir istisna,
yerel ayar eşleştirme kuralları altında, geçerli yerel ayarda "\d" ile eşleşen "[0-9]" olmayabilir,
ve/veya kod noktası 256'dan küçük olan diğer karakterlerle eşleşebilir.
yasal olan yerel ayar tanımları, "[0-9]" ile başka bir 10 kümesiyle eşleşmek olacaktır.
ardışık rakam karakterleri; başka bir şey C dilini ihlal ederdi
standart, ancak Perl şu anda bununla ilgili hiçbir şey varsaymıyor.)

Bunun anlamı, "/a" değiştiricisi etkin olmadığı sürece, "\d" yalnızca
'0' - '9' rakamları, ayrıca Arapça, Devanagari ve diğer dillerden rakamlar. Bu olabilir
bazı karışıklıklara ve bazı güvenlik sorunlarına neden olur.

"\d" ile eşleşen bazı rakamlar, [0-9] rakamlarından bazılarına benziyor ancak farklı değerlere sahip.
Örneğin, BENGALI DIGIT FOUR (U+09EA) ASCII DIGIT SEKİZE çok benziyor
(U+0038). Yalnızca ASCII rakamlarını bekleyen bir uygulama yanlış yönlendirilebilir veya
eşleşme "\d+" ise, eşleşen dize farklı karakterlerden rakamların bir karışımını içerebilir.
gerçekte olduğundan farklı bir sayıyı ifade ediyormuş gibi görünen yazı sistemleri.
"sayı()" Unicode::UCD'de değeri güvenli bir şekilde hesaplamak için kullanılabilir, eğer "undef" döndürülürse
giriş dizesi böyle bir karışım içerir.

"\p{Rakam}" ne anlama gelir (ve dolayısıyla "/a" değiştiricisi altındaki "\d")
"\p{General_Category=Decimal_Number}" veya eşanlamlı olarak "\p{General_Category=Rakam}".
Unicode sürüm 4.1 ile başlayarak, bu, aşağıdakilerle eşleşen aynı karakter kümesidir:
"\p{Sayısal_Tip=Ondalık}". Ancak Unicode'un benzer bir özelliği olan farklı bir özelliği de vardır.
tamamen farklı bir karakter kümesiyle eşleşen ad, "\p{Sayısal_Tip=Rakam}".
Bu karakterler, "DAİRE BİRİNCİ HANGİ" veya abonelikler gibi şeylerdir veya yazıdan alınmıştır.
on basamaktan yoksun sistemler.

Tasarım amacı, "\d"nin güvenli bir şekilde oluşturulabilecek karakter kümesiyle tam olarak eşleşmesidir.
"normal" big-endian konumsal ondalık sözdizimi ile kullanılır, burada örneğin 123 bir anlamına gelir
'yüz', artı iki 'onlar', artı üç 'bir'. Bu konumsal gösterim
mutlaka diğer "rakam" türüyle eşleşen karakterler için geçerlidir,
"\p{Sayısal_Tip=Rakam}" ve dolayısıyla "\d" bunlarla eşleşmiyor.

Tamil rakamları (U+0BE6 - U+0BEF) yasal olarak eski tip Tamil numaralarında da kullanılabilir.
anlamına gelen karakterlerle ayrılmış, arka arkaya birden fazla görünmeyecekleri
"kez 10", "kez 100" vb. (Bkz.http://www.unicode.org/notes/tn21>.)

"\d" ile eşleşmeyen herhangi bir karakter "\D" ile eşleştirilir.

Word karakterler

Bir "\w", tek bir alfasayısal karakterle (alfabetik karakter veya ondalık karakter) eşleşir.
hane); veya alt çizgi ("_" gibi) bir bağlantı noktalama karakteri; veya bir "işaret"
bunlardan birine bağlanan karakter (bir tür aksan gibi). bir eşleşmiyor
tüm dünya. Bir kelimenin tamamını eşleştirmek için "\w+" kullanın. Bu, eşleştirmekle aynı şey değil
İngilizce kelime, ancak ASCII aralığında bir Perl tanımlayıcı dizisi ile aynıdır
karakterler.

"/a" değiştiricisi etkinse ...
"\w", 63 karakterle [a-zA-Z0-9_] eşleşir.

aksi halde ...
255'in üzerindeki kod noktaları için ...
"\w", bu aralıktaki "\p{Word}" eşleşmeleriyle aynı şekilde eşleşir. yani eşleşir
Tay harfleri, Yunan harfleri vb. Bu, bağlayıcı noktalama işaretlerini içerir (örneğin,
iki kelimeyi birbirine bağlayan alt çizgi) veya "COMBINING" gibi aksan işaretleri
TILDE" ve genellikle yardımcı eklemek için kullanılan değiştirici harfler
harflere işaretler.

256'nın altındaki kod noktaları için ...
yerel kurallar yürürlükteyse ...
"\w", platformun yerel alt çizgi karakteriyle artı ne olursa olsun eşleşir
yerel ayar alfasayısal olarak kabul edilir.

Unicode kuralları yürürlükteyse ...
"\w", "\p{Word}" ile tam olarak eşleşir.

aksi halde ...
"\w", [a-zA-Z0-9_] ile eşleşir.

Hangi kuralların uygulanacağı "Hangi karakter kümesi değiştiricisi
etkisi?" Perlre'de.

Tam Unicode sözcük karakter listesiyle ilgili bir dizi güvenlik sorunu vardır. Görmek
<http://unicode.org/reports/tr36>.

Ayrıca, programlama dilinde olan biraz daha ince taneli karakter kümesi için
ASCII aralığının dışındaki tanımlayıcılar, bunun yerine daha özelleştirilmiş olanı kullanmak isteyebilirsiniz.
"Unicode Özellikleri", "\p{ID_Start}", "\p{ID_Continue}", "\p{XID_Start}" ve
"\p{XID_Devam}". Görmekhttp://unicode.org/reports/tr31>.

"\w" ile eşleşmeyen herhangi bir karakter "\W" ile eşleştirilir.

Beyaz boşluk

"\s", boşluk olarak kabul edilen herhangi bir tek karakterle eşleşir.

"/a" değiştiricisi etkinse ...
Tüm Perl sürümlerinde "\s", 5 karakter [\t\n\f\r ] ile eşleşir; yani,
yatay sekme, yeni satır, form besleme, satır başı ve boşluk.
Perl v5.18'den başlayarak, "\cK" dikey sekmesiyle de eşleşir. Aşağıdaki "[1]" notuna bakın
bunun tartışması için.

aksi halde ...
255'in üzerindeki kod noktaları için ...
"\s", 255'in üzerinde "s" sütunu ile gösterilen kod noktalarıyla tam olarak eşleşir.
aşağıdaki tablo.

256'nın altındaki kod noktaları için ...
yerel kurallar yürürlükteyse ...
"\s", yerel ayarın boşluk olarak kabul ettiği her şeyle eşleşir.

Unicode kuralları yürürlükteyse ...
"\s", tabloda "s" sütunu ile gösterilen karakterlerle tam olarak eşleşir
altında.

aksi halde ...
"\s", [\t\n\f\r ] ve Perl v5.18'den başlayarak dikey sekme "\cK" ile eşleşir.
(Bununla ilgili bir tartışma için aşağıdaki "[1]" notuna bakın.) Bu listenin
bölünemez alanı içerir.

Hangi kuralların uygulanacağı "Hangi karakter kümesi değiştiricisi
etkisi?" Perlre'de.

"\s" ile eşleşmeyen herhangi bir karakter "\S" ile eşleştirilir.

"\h" yatay boşluk olarak kabul edilen herhangi bir karakterle eşleşir; bu, platformun
boşluk ve sekme karakterleri ve aşağıdaki tabloda listelenen diğer birkaç karakter. "\H" herhangi biriyle eşleşir
karakter yatay boşluk olarak kabul edilmez. Platformun yerel karakterini kullanıyorlar
ayarlayın ve kullanımda olabilecek herhangi bir yerel ayarı dikkate almayın.

"\v" dikey boşluk olarak kabul edilen herhangi bir karakterle eşleşir; bu, platformun
satır başı ve satır besleme karakterleri (yeni satır) artı birkaç diğer karakter, tümü
aşağıdaki tabloda listelenmiştir. "\V", dikey boşluk olarak kabul edilmeyen herhangi bir karakterle eşleşir.
Platformun yerel karakter setini kullanırlar ve herhangi bir yerel ayarı dikkate almazlar.
aksi halde kullanımda olun.

"\R", Unicode kuralları kapsamında yeni satır olarak kabul edilebilecek her şeyle eşleşir. Bir eşleşebilir
çok karakterli dizi Parantez içindeki bir karakter sınıfı içinde kullanılamaz; "\v" kullan
bunun yerine (dikey boşluk). Platformun yerel karakter setini kullanır ve
aksi halde kullanımda olabilecek herhangi bir yerel ayarı göz önünde bulundurun. Detaylar tartışılır
Perlrebackslash.

"\s" (ve "\d" ve "\w") aksine, "\h" ve "\v"nin her zaman aynı karakterlerle eşleştiğine dikkat edin,
etkin yerel ayar veya kaynak dizenin olup olmadığı gibi diğer faktörlere bakılmaksızın
UTF-8 formatında.

"\s"nin "[\h\v]" ile eşdeğer olduğu düşünülebilir. Bu gerçekten Perl'den başlayarak doğrudur
v5.18, ancak bundan önceki tek fark, dikey sekmenin ("\cK")
"\s" ile eşleştirilir.

Aşağıdaki tablo, "\s", "\h" ve "\v" ile eşleşen karakterlerin tam listesidir.
Unicode 6.3'ün.

İlk sütun, karakterin Unicode kod noktasını (onaltılık biçimde), ikinci sütun
sütun (Unicode) adını verir. Üçüncü sütun, hangi sınıf(lar)a göre
karakter eşleşir ("\s" eşleşmesini değiştiren hiçbir yerel ayarın geçerli olmadığı varsayılarak).

0x0009 KARAKTER TABULASYONU hs
0x000a HAT BESLEME (LF) vs
0x000b SATIR TABULASYONU vs [1]
0x000c FORM BESLEME (FF) vs
0x000d TAŞIMA İADESİ (CR) vs
0x0020 UZAY hs
0x0085 SONRAKİ SATIR (NEL) - [2]
0x00a0 KESİNTİSİZ UZAY hs [2]
0x1680 OGHAM UZAY İŞARETİ hs
0x2000 EN DÖRTLÜ hs
0x2001 EM DÖRTLÜ hs
0x2002 TR BOŞLUK hs
0x2003 EM SPACE hs
0x2004 BAŞINA ÜÇ UZAY hs
0x2005 EM BAŞINA DÖRT UZAY hs
0x2006 EM BAŞINA ALTI UZAY hs
0x2007 ŞEKİL UZAY hs
0x2008 NOKTALAMA BOŞLUĞU hs
0x2009 İNCE UZAY hs
0x200a SAÇ BOŞLUĞU hs
0x2028 HAT AYIRICI vs
0x2029 PARAGRAF AYIRICI vs
0x202f KESİNTİSİZ DAR UZAY hs
0x205f ORTA MATEMATİKSEL UZAY hs
0x3000 İDEOGRAFİK UZAY hs

[1] Perl v5.18'den önce, "\s" dikey sekmeyle eşleşmiyordu. "[^\S\cK]" (belirsiz bir şekilde)
"\s"nin geleneksel olarak yaptığıyla eşleşir.

[2] SONRAKİ SATIR ve KESİNTİSİZ BOŞLUK, içindeki kurallara bağlı olarak "\s" ile eşleşebilir veya eşleşmeyebilir.
Efekt. Bu bölümün başlangıcına bakın.

Unicode Emlaklar

"\pP" ve "\p{Prop}", verilen Unicode'a uyan karakterlerle eşleşen karakter sınıflarıdır
özellikler. "\pP" formunda tek harfli özellik adları, özellik ile birlikte kullanılabilir.
"\p"den sonraki ad, aksi takdirde parantezler gereklidir. Parantez kullanırken, bir
parantez içine alınmış özellik adı olan tek form ve bir bileşik form
bu, "\p{ad=değer}" gibi görünür, bu, "name" özelliğinin
karakterin belirli bir "değeri" vardır. Örneğin, bir sayı için bir eşleşme yazılabilir.
"/\pN/" veya "/\p{Sayı}/" veya "/\p{Sayı=Doğru}/" olarak. Küçük harfler eşleştirilir
mülk tarafından Küçük harf kısa formu olan Ll. Diş tellerine ihtiyaçları var, yani
"/\p{Ll}/" veya "/\p{Küçük Harf}/" olarak yazılmış veya
"/\p{General_Category=Lowercase_Letter}/" (alt çizgiler isteğe bağlıdır). "/\pLl/"
geçerlidir, ancak farklı bir anlama gelir. İki karakterli bir dizeyle eşleşir: bir harf
(Unicode özelliği "\pL"), ardından küçük harfli bir "l".

Yerel ayar kuralları geçerli değilse, bir Unicode özelliğinin kullanımı normal kuralları zorlar.
Zaten değilse, Unicode kurallarını kullanarak ifade.

Hemen hemen tüm özelliklerin büyük/küçük harfe duyarlı olmayan eşleşmeye karşı bağışık olduğunu unutmayın. Yani, ekleyerek
bir "/i" normal ifade değiştiricisi, eşleştiği şeyi değiştirmez. iki set var
etkilenenler. İlk küme "Uppercase_Letter", "Lowercase_Letter" ve
"Titlecase_Letter", tümü "/i" eşleşmesi altındaki "Cased_Letter" ile eşleşir. ikinci set
"Büyük Harf", "Küçük Harf" ve "Başlık" olup, bunların tümü "/i" altındaki "Kasa" ile eşleşir
eşleştirme. (Bu kümeler arasındaki fark, Romen rakamları gibi bazı şeylerin,
hem büyük hem de küçük harfle gelirler, bu nedenle "Kasalı" olurlar, ancak kabul edilmezler.
harfler, yani "Cased_Letter" değiller. Onlar aslında "Letter_Number"lar.) Bu set
ayrıca her ikisi de "/i" ile eşleşen "PosixUpper" ve "PosixLower" alt kümelerini içerir
"PosixAlfa".

Unicode özellikleri hakkında daha fazla ayrıntı için, perlunicode'da "Unicode Karakter Özellikleri"ne bakın;
olası özelliklerin tam listesi için bkz. "\p{} üzerinden erişilebilen özellikler ve
\P{}", "/i" farklılıklarına sahip tüm formları not eden perluniprops'ta.
kendi özelliklerinizi tanımlamanız mümkündür. Bu, "Kullanıcı Tanımlı Karakter
Özellikler" perlunicode'da.

Unicode özellikleri yalnızca Unicode kod noktalarında tanımlanır (sürpriz!). İçinde başlayan
v5.20, "\p" ve "\P" ile eşleştirirken, Perl Unicode olmayan kod noktalarını ele alır (bunlar
yasal Unicode maksimum 0x10FFFF'nin üzerinde) tipik atanmamış Unicode'larmış gibi
kod noktaları.

v5.20'den önce, Perl bir uyarı verdi ve tüm eşleşmelerin Unicode olmayan kodda başarısız olmasını sağladı
puan. Bu biraz şaşırtıcı olabilir:

chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # Perls < v5.20'de Başarısız.
chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Perls'te de başarısız oluyor
# < v5.20

Bu iki maç tamamlayıcı olarak düşünülse de v5.20'ye kadar öyleydiler.
yalnızca Unicode kod noktalarında.

Örnekler

"a" =~ /\w/ # Eşleşir, "a" bir 'kelime' karakteridir.
"7" =~ /\w/ # Eşleşir, "7" de bir 'kelime' karakteridir.
"a" =~ /\d/ # Eşleşme yok, "a" bir rakam değil.
"7" =~ /\d/ # Eşleşme, "7" bir rakamdır.
" " =~ /\s/ # Eşleşme, boşluk boşluktur.
"a" =~ /\D/ # Eşleşir, "a" rakamsızdır.
"7" =~ /\D/ # Eşleşme yok, "7" rakam dışı değil.
" " =~ /\S/ # Eşleşme yok, boşluk olmayan boşluk değildir.

" " =~ /\h/ # Eşleştirme, boşluk yatay boşluktur.
" " =~ /\v/ # Eşleşme yok, boşluk dikey boşluk değildir.
"\r" =~ /\v/ # Eşleşme, dönüş dikey boşluktur.

"a" =~ /\pL/ # Eşleşme, "a" bir harftir.
"a" =~ /\p{Lu}/ # Eşleşme yok, /\p{Lu}/ büyük harflerle eşleşiyor.

"\x{0e0b}" =~ /\p{Tay}/ # Eşleşme, \x{0e0b} karakterdir
# 'TAİ KARAKTER BU KADAR KADAR', ve işte bu
# Tay Unicode sınıfı.
"a" =~ /\P{Lao}/ # "a" Laosca bir karakter olmadığı için eşleştirin.

"\d", "\w" vb.'nin tek karakterlerle eşleştiğini, tam olmadığını vurgulamakta fayda var.
sayılar veya kelimeler. Rakamlardan oluşan bir sayıyı eşleştirmek için "\d+" kullanın; bir kelimeyi eşleştirmek için,
"\w+" kullanın. Ancak, yukarıda belirtildiği gibi, bunu yaparken güvenlik hususlarının farkında olun.

parantezli Karakter Sınıflar
Perl düzenli ifadelerinde kullanabileceğiniz üçüncü karakter sınıfı biçimi, parantez içinde
karakter sınıfı. En basit haliyle, eşleştirilebilecek karakterleri listeler,
köşeli parantezlerle çevrilidir, bunun gibi: "[aeiou]". Bu "a", "e", "i" ile eşleşir,
"o" veya "u". Diğer karakter sınıfları gibi, tam olarak bir karakter eşleştirilir.*
karakter sınıfında belirtilen karakterlerden oluşan daha uzun bir dize,
niceleyici ile karakter sınıfı. Örneğin, "[aeiou]+" bir veya daha fazla küçük harfle eşleşir
İngilizce ünlüler.

Bir karakter sınıfındaki bir karakteri tekrar etmenin hiçbir etkisi yoktur; sette olduğu kabul edilir
sadece bir kere.

Örnekler:

"e" =~ /[aeiou]/ # Eşleştirme, sınıfta "e" olarak listelenir.
"p" =~ /[aeiou]/ # Eşleşme yok, "p" sınıfta listelenmiyor.
"ae" =~ /^[aeiou]$/ # Eşleşme yok, yalnızca bir karakter sınıfı eşleşir
#tek bir karakter.
"ae" =~ /^[aeiou]+$/ # Niceleyici nedeniyle eşleşme.

-------

* Tek bir karakterle eşleşen parantez içine alınmış bir karakter sınıfının iki istisnası vardır
bir tek. Her birinin, işlerin yürümesi için Perl tarafından özel olarak işlenmesi gerekir:

· Sınıf, "/i" eşleşme kuralları altında büyük/küçük harfsiz olarak eşleştirildiğinde ve
sınıf içinde açıkça belirtilirse, çok karakterli bir diziyle eşleşir
Unicode kuralları uyarınca, sınıf da bu diziyle eşleşecektir. Örneğin,
Unicode, "LATIN KÜÇÜK HARF SHARP S" harfinin diziyle eşleşmesi gerektiğini söylüyor
"/i" kuralları altında "ss". Böylece,

'ss' =~ /\A\N{LATIN KÜÇÜK HARF SHARP S}\z/i # Eşleşmeler
'ss' =~ /\A[aeioust\N{LATIN KÜÇÜK HARF SHARP S}]\z/i # Eşleşmeler

Bunun olması için, sınıf ters çevrilmemelidir ("Olumsuz" bölümüne bakınız) ve karakter
açıkça belirtilmeli ve çok karakterli bir aralığın parçası olmamalıdır (olsa bile
uç noktalarından biri). ("Karakter Aralıkları" kısaca açıklanacaktır.) Bu nedenle,

'ss' =~ /\A[\0-\x{ff}]\z/ui # Eşleşmiyor
'ss' =~ /\A[\0-\N{LATIN KÜÇÜK HARF SHARP S}]\z/ui # Eşleşme yok
'ss' =~ /\A[\xDF-\xDF]\z/ui # ASCII platformlarında eşleşir, çünkü
# \xDF LATİN KÜÇÜK HARF SHARP S'dir,
# ve aralık sadece bir
# öğe

Bu tür aralıkları belirtmenin yine de iyi bir fikir olmadığını unutmayın.

· "\N{...}" olarak bilinen bazı adlar, bir dizi karakter yerine birden çok karakter dizisine atıfta bulunur.
her zamanki tek karakter. Bunlardan biri sınıfa dahil edildiğinde, tüm
sıra eşleşir. Örneğin,

"\N{TAMIL MEKTUBU KA}\N{TAMIL SESLİ İŞARETİ AU}"
=~ / ^ [\N{TAMIL HECE KAU}] $ /x;

eşleşir, çünkü "\N{TAMIL HECE KAU}" ikisinden oluşan adlandırılmış bir dizidir
eşleşen karakterler. Parantez içine alınmış bir sınıfın eşleşebileceği diğer örnek gibi
birden çok karakter ve benzer nedenlerle sınıf tersine çevrilmemelidir ve
adlandırılmış dizi, her ikisinin de uç noktası olduğu bir aralıkta görünmeyebilir. Eğer
bunlar olur, karakter sınıfı genişletilmiş bir aralıktaysa bu önemli bir hatadır
"(?[...])" sınıf; ve yalnızca ilk kod noktası kullanılır ("regexp" tipi uyarı ile
yükseltilmiş) aksi halde.

Özel Karakterler içeride a parantezli Karakter Sınıf

Normal ifadelerde meta karakter olan çoğu karakter (yani,
".", "*" veya "(") gibi özel bir anlam taşırlar ve özel anlamlarını kaybederler ve kullanılabilirler.
onlardan kaçmaya gerek kalmadan bir karakter sınıfının içinde. Örneğin, "[()]" eşleşir
ya bir açılış parantezi ya da bir kapanış parantezi ve içindeki parantezler
karakter sınıfı gruplandırmaz veya yakalamaz.

Bir karakter sınıfı içinde özel anlam taşıyabilecek karakterler şunlardır: "\", "^", "-",
"[" ve ​​"]" ve aşağıda tartışılmaktadır. Bir ters eğik çizgi ile kaçabilirler, ancak bu
bazen gerekli değildir, bu durumda ters eğik çizgi atlanabilir.

"\b" dizisi, parantez içine alınmış bir karakter sınıfı içinde özeldir. dışında iken
karakter sınıfı, "\b", ikisinden birine sahip olmayan bir noktayı gösteren bir iddiadır.
parantez içine alınmış bir karakterin içinde, her iki tarafta sözcük karakterleri veya sözcük olmayan iki karakter
class, "\b" bir geri al karakteriyle eşleşir.

"\a", "\c", "\e", "\f", "\n", "\N{ dizileriİSİM}", "\N{U+hex karakter}", "\r", "\t" ve
"\x" de özeldir ve köşeli parantez içindeki karakterlerle aynı anlamlara sahiptir.
sınıf.

Ayrıca, iki veya üç sekizlik basamaktan sonra gelen bir ters eğik çizgi, sekizlik bir sayı olarak kabul edilir.

Bir "[", bir POSIX karakterinin başlangıcı olmadığı sürece, bir karakter sınıfı içinde özel değildir.
sınıfı (aşağıdaki "POSIX Karakter Sınıfları"na bakın). Normalde kaçmaya ihtiyacı yoktur.

Bir "]" normalde bir POSIX karakter sınıfının sonudur (bkz. "POSIX Karakter Sınıfları"
aşağıda) veya parantez içindeki karakter sınıfının sonunu bildirir. dahil etmek isterseniz
"]" karakter kümesinde, genellikle ondan kaçmanız gerekir.

Ancak, "]" ilk (veya ilk karakter bir şapka ise ikincisi)
parantez içine alınmış bir karakter sınıfının karakteri, sınıfın sonunu göstermez (sizin
boş bir sınıfa sahip olamaz) ve kullanılabilecek karakter kümesinin bir parçası olarak kabul edilir.
kaçmadan eşleşti.

Örnekler:

"+" =~ /[+?*]/ # Eşleşme, "+" bir karakter sınıfında özel değildir.
"\cH" =~ /[\b]/ # Eşleşme, \b bir karakter sınıfında
#, bir geri alana eşdeğerdir.
"]" =~ /[][]/ # Karakter sınıfının içerdiği şekilde eşleştirin
# ikisi ve ].
"[]" =~ /[[]]/ # Eşleşme, desen bir karakter sınıfı içeriyor
# sadece [ içerir ve karakter sınıfı
# ardından bir ].

Karakter Aralıkları

Bir dizi karakteri eşleştirmek istemeniz nadir değildir. Neyse ki, hepsini listelemek yerine
aralıktaki karakterler, kısa çizgi ("-") kullanılabilir. Parantez içine alınmış bir karakterin içindeyse
sınıf, tire ile ayrılmış iki karaktere sahipseniz, tüm karakterler gibi ele alınır.
ikisi arasında sınıftaydı. Örneğin, "[0-9]" herhangi bir ASCII rakamıyla eşleşir ve
"[am]", ASCII alfabesinin ilk yarısındaki herhangi bir küçük harfle eşleşir.

Tirenin her iki tarafındaki iki karakterin her iki harf olması gerekmediğini unutmayın.
veya her iki rakam. Tavsiye edilmese de herhangi bir karakter mümkündür. "['-?]" içerir
karakter aralığı, ancak çoğu insan bunun hangi karakterlerin olduğunu bilemez.
Ayrıca, kodun bir bilgisayarda çalışması gerekiyorsa, bu tür aralıklar taşınabilirlik sorunlarına yol açabilir.
EBCDIC gibi farklı bir karakter seti kullanan platform.

Bir karakter sınıfındaki kısa çizgi sözdizimsel olarak bir aralığın parçası olamıyorsa, örneğin
karakter sınıfının ilk veya son karakteri olduğu için veya hemen
bir aralığı takip eder, kısa çizgi özel değildir ve bu nedenle eşleştirilecek bir karakter olarak kabul edilir
kelimenin tam anlamıyla. Karakter kümenizde bir tire işareti ve konumunun eşleşmesini istiyorsanız
sınıfta bir aralığın parçası olarak kabul edilebilecek şekildeyse, bundan kaçmalısınız.
ters eğik çizgi ile tire.

Örnekler:

[az] # Küçük ASCII harfi olan bir karakterle eşleşir.
[a-fz] # 'a' ve 'f' (dahil) arasındaki herhangi bir harfle eşleşir veya
# 'z' harfi.
[-z] # Kısa çizgi ('-') veya 'z' harfiyle eşleşir.
[afm] # 'a' ve 'f' (dahil) arasındaki herhangi bir harfle eşleşir,
# tire ('-') veya 'm' harfi.
['-?] # '()*+,-./0123456789:;<=>?
# (Ama bir EBCDIC platformunda değil).
[\N{APOSTROF}-\N{SORU İŞARETİ}]
# '()*+,-./0123456789:;<=>?
# EBCDIC platformunda bile.
[\N{U+27}-\N{U+3F}] # Aynı. (U+27 "'" ve U+3F "?")

Yukarıdaki son iki örneğin gösterdiği gibi, ASCII olmayan platformlara taşınabilirliği şu şekilde sağlayabilirsiniz:
aralık bitiş noktaları için "\N{...}" formunu kullanarak. Bunlar belirtilen aralığı gösterir
Unicode değerleri kullanılarak yorumlanmalıdır, bu nedenle "[\N{U+27}-\N{U+3F}]" eşleşmek anlamına gelir
"\N{U+27}", "\N{U+28}", "\N{U+29}", ..., "\N{U+3D}", "\N{U+ 3E}" ve "\N{U+3F}", her neyse
bunlar için yerel kod noktası sürümleri. Bunlara "Unicode" aralıkları denir. Eğer
her iki uç da "\N{...}" biçimindedir, aralık Unicode olarak kabul edilir. Bir "regexp" uyarısı
diğer uç nokta taşınabilir olmayan bir şekilde belirtilmişse, "re 'strict' kullan" altında yükseltilir:

[\N{U+00}-\x09] # Yeniden 'strict' altında uyarı; \x09 taşınabilir değil
[\N{U+00}-\t] # Uyarı yok;

Yukarıdakilerin her ikisi de "\N{U+00}" "\N{U+01}", ... "\N{U+08}", "\N{U+09}" karakterleriyle eşleşiyor,
ancak "\x09" bir hata olabilir gibi görünüyor, bu nedenle uyarı verilir ("yeniden altında"
'katı'") bunun için.

Perl ayrıca "AZ", "az", "0-9" aralıklarının ve bunların alt aralıklarının eşleşmesini garanti eder.
yalnızca İngilizce konuşan birinin, herhangi bir platformda eşleşmelerini bekleyeceği şey. Yani, "[AZ]"
26 ASCII büyük harfle eşleşir; "[az]" 26 küçük harfle eşleşir; ve
"[0-9]", 10 basamakla eşleşir. "[hk]" gibi alt aralıklar, buna uygun olarak eşleşir.
sadece dört harf "h", "i", "j" ve "k". Bu, ASCII üzerindeki doğal davranıştır.
"h" ile "k" arasındaki kod noktalarının (sıra değerleri) ardışık olduğu platformlar
tamsayılar (0x68 - 0x6B). Ancak bunu başarmak için özel işlemlere ihtiyaç duyulabilir.
ASCII olmayan yerel karakter kümesine sahip platformlar. Örneğin, EBCDIC platformlarında,
"h" için kod noktası 0x88, "i" 0x89, "j" 0x91 ve "k" 0x92'dir. özellikle Perl
boşluktaki yedi kod noktasını hariç tutmak için "[hk]" davranır: 0x8A - 0x90. Bu
özel işlem, yalnızca aralık, ASCII'den birinin alt aralığı olduğunda çağrılır.
büyük harf, küçük harf ve rakam aralıkları VE aralığın her bir ucu ya bir olarak ifade edilir
değişmez, "A" gibi veya adlandırılmış bir karakter olarak ("\N{U+..." formu dahil "\N{...}").

EBCDIC Örnekleri:

[ij] # "i" veya "j" ile eşleşir
[i-\N{LATIN KÜÇÜK J Harfi}] # Aynı
[i-\N{U+6A}] # Aynı
[\N{U+69}-\N{U+6A}] # Aynı
[\x{89}-\x{91}] # 0x89 ("i"), 0x8A .. 0x90, 0x91 ("j") ile eşleşir
[i-\x{91}] # Aynı
[\x{89}-j] # Aynı
[iJ] # Eşleşmeler, 0x89 ("i") .. 0xC1 ("J"); özel
# işlem aralığı karıştırıldığı için geçerli değil
# dava

olumsuzluk

Bunun yerine eşleştirmek istemediğiniz karakterleri listelemek de mümkündür. yapabilirsin
karakter sınıfındaki ilk karakter olarak bir şapka ("^") kullanarak. Örneğin,
"[^az]", küçük ASCII harfi olmayan herhangi bir karakterle eşleşir, bu nedenle
bir milyondan fazla Unicode kod noktası içerir. Sınıfın "olumsuz" olduğu söylenir veya
"ters çevrilmiş".

Bu sözdizimi, şapka işaretini parantez içine alınmış bir karakter sınıfı içinde özel bir karakter yapar, ancak
yalnızca sınıfın ilk karakteriyse. Yani şapkayı aşağıdakilerden biri olarak istiyorsanız
eşleşecek karakterler, ya şapka işaretinden kaçar ya da önce onu listelemez.

Ters köşeli parantez içine alınmış karakter sınıflarında, Perl normalde şunu söyleyen Unicode kurallarını yok sayar:
bu adlandırılmış dizi ve belirli karakterler birden çok karakter dizisiyle eşleşmelidir
büyük/küçük harfsiz "/i" eşleşmesi altında kullanın. Bu kurallara uymak oldukça kafa karıştırıcı olabilir
durumlar:

"ss" =~ /^[^\xDF]+$/ui; # Maçlar!

Bu, "\xDF" olmayan veya "\xDF" ile eşleşmeyen herhangi bir karakter dizisiyle eşleşmelidir.
"/i" altında. "s", "\xDF" değildir, ancak Unicode, "ss"nin "\xDF"nin altında eşleştiği şey olduğunu söyler.
"/Bence". Peki hangisi "kazanır"? Dize "ss" olduğu için eşleşmede başarısız mı oluyorsunuz yoksa kabul ediyor musunuz?
çünkü arkasında bir "s" varken başka bir "s" var mı? Perl ikincisini seçti. (bkz. not
Yukarıdaki "Parantezli Karakter Sınıfları".)

Örnekler:

"e" =~ /[^aeiou]/ # Eşleşme yok, 'e' listeleniyor.
"x" =~ /[^aeiou]/ # 'x' küçük harfli bir sesli harf olmadığı için eşleştirin.
"^" =~ /[^^]/ # Eşleşme yok, şapka işareti olmayan herhangi bir şeyle eşleşir.
"^" =~ /[x^]/ # Maç, şapka burada özel değil.

backslash Diziler

Herhangi bir ters eğik çizgi dizisi karakter sınıfını ("\N" ve "\R" hariç) koyabilirsiniz.
parantez içine alınmış bir karakter sınıfı içinde ve tüm karakterleri koymuşsunuz gibi davranacaktır.
karakter sınıfı içindeki ters eğik çizgi dizisiyle eşleştirilir. Örneğin, "[af\d]"
herhangi bir ondalık basamakla veya 'a' ile 'f' dahil arasındaki küçük harflerden herhangi biriyle eşleşir.

Parantez içindeki bir karakter sınıfındaki "\N", "\N{ biçiminde olmalıdırisim}" veya "\N{U+hex
karakter}"ve yeni satır olmayanlarla eşleşen biçim OLMAYACAKTIR, aynı nedenle nokta "."
parantez içinde bir karakter sınıfı özel anlamını kaybeder: hemen hemen her şeyle eşleşir,
ki bu genellikle olmasını istediğiniz şey değildir.

Örnekler:

/[\p{Thai}\d]/ # Tay dili olan bir karakterle eşleşir
# karakter veya bir rakam.
/[^\p{Arapça}()]/ # Arapça olmayan bir karakterle eşleşir
# karakter, ne de parantez.

Ters eğik çizgi dizisi karakter sınıfları, bir aralığın uç noktalarından birini oluşturamaz. Böylece,
söyleyemezsiniz:

/[\p{Tay}-\d]/ # Yanlış!

POSIX Karakter Sınıflar

POSIX karakter sınıfları "[:class:]" biçimindedir, burada sınıf ad ve "[:"
ve ":]" sınırlayıcıları. POSIX karakter sınıfları yalnızca görünür içeride parantez içine alınmış karakter
sınıflar ve bir grup karakteri listelemenin kullanışlı ve açıklayıcı bir yoludur.

Sözdizimine dikkat edin,

# Doğru:
$dizge =~ /[[:alfa:]]/

# Yanlış (uyarır):
$string =~ /[:alfa:]/

İkinci model, iki nokta üst üste ve "a" harflerinden oluşan bir karakter sınıfı olacaktır.
"l", "p" ve "h".

POSIX karakter sınıfları, daha büyük bir parantez içine alınmış karakter sınıfının parçası olabilir. Örneğin,

[01[:alfa:]%]

geçerlidir ve '0', '1', herhangi bir alfabetik karakter ve yüzde işaretiyle eşleşir.

Perl, aşağıdaki POSIX karakter sınıflarını tanır:

alpha Herhangi bir alfabetik karakter ("[A-Za-z]").
alnum Herhangi bir alfasayısal karakter ("[A-Za-z0-9]").
ascii ASCII karakter kümesindeki herhangi bir karakter.
boş Bir boşluğa veya yatay bir sekmeye ("\t") eşit bir GNU uzantısı.
cntrl Herhangi bir kontrol karakteri. Aşağıdaki Not [2]'ye bakın.
digit Herhangi bir ondalık basamak ("[0-9]"), "\d"ye eşdeğerdir.
grafik Boşluk hariç yazdırılabilir herhangi bir karakter. Aşağıdaki Not [3]'e bakın.
küçük Herhangi bir küçük harf ("[az]").
yazdır Boşluk dahil herhangi bir yazdırılabilir karakter. Aşağıdaki Not [4]'e bakın.
noktalama "Kelime" karakterleri hariç herhangi bir grafik karakter. Not [5].
boşluk Herhangi bir boşluk karakteri. dikey sekme dahil "\s"
("\cK").
üst Herhangi bir büyük harf ("[AZ]").
kelime A Perl uzantısı ("[A-Za-z0-9_]"), "\w" ile eşdeğerdir.
xdigit Herhangi bir onaltılık basamak ("[0-9a-fA-F]").

Unicode özellikleri gibi, POSIX özelliklerinin çoğu, aşağıdakilerden bağımsız olarak aynı şekilde eşleşir:
büyük/küçük harfe duyarlı olmayan ("/i") eşleşmenin etkin olup olmadığı. İki istisna
"[:üst:]" ve "[:alt:]". "/i" altında, her biri "[:upper:]" birleşimiyle eşleşir ve
"[:daha düşük:]".

Çoğu POSIX karakter sınıfı, iki Unicode stili "\p" özellik karşılığına sahiptir. (Onlar
resmi Unicode özellikleri değil, resmi Unicode'dan türetilen Perl uzantıları
özellikleri.) Aşağıdaki tablo, POSIX karakter sınıfları ile bunlar arasındaki ilişkiyi göstermektedir.
uzantılarıdır.

Tabloda "ASCII-aralığı Unicode" etiketli sütundaki bir karşılık, yalnızca eşleşir
ASCII karakter kümesindeki karakterler.

"Tam aralıklı Unicode" etiketli sütundaki diğer karşılık, herhangi biriyle eşleşir.
tam Unicode karakter kümesindeki uygun karakterler. Örneğin, "\p{Alfa}"
yalnızca ASCII alfabetik karakterlerle değil, tüm Unicode'daki herhangi bir karakterle eşleşir
karakter kümesi alfabetik olarak kabul edilir. "ters eğik çizgi dizisi" etiketli sütunda bir giriş
(kısa) bir eşdeğerdir.

[[:...:]] ASCII aralığı Tam aralıklı ters eğik çizgi Not
Unicode Unicode dizisi
-------------------------------------------------- ---
alfa \p{PosixAlpha} \p{XPosixAlpha}
okul \p{PosixAlnum} \p{XPosixAlnum}
ascii \p{ASCII}
boş \p{PosixBlank} \p{XPosixBlank} \h [1]
veya \p{HorizSpace} [1]
cntrl \p{PosixCntrl} \p{XPosixCntrl} [2]
rakam \p{PosixDigit} \p{XPosixDigit} \d
grafik \p{PosixGraph} \p{XPosixGraph} [3]
daha düşük \p{PosixDüşük} \p{XPosixDüşük}
yazdır \p{PosixPrint} \p{XPosixPrint} [4]
noktalama \p{PosixPunct} \p{XPosixPunct} [5]
\p{PerlSpace} \p{XPerlSpace} \s [6]
boşluk \p{PosixSpace} \p{XPosixSpace} [6]
üst \p{PosixUpper} \p{XPosixUpper}
kelime \p{PosixWord} \p{XPosixWord} \w
xdigit \p{PosixXDigit} \p{XPosixXDigit}

[1] "\p{Boş}" ve "\p{HorizSpace}" eşanlamlıdır.

[2] Kontrol karakterleri çıktı üretmezler, bunun yerine genellikle
bir şekilde terminal: örneğin, yeni satır ve geri al, kontrol karakterleridir. ASCII'de
platformlar, ASCII aralığında, kod noktaları 0 ile 31 arasında olan karakterler
dahil, artı 127 ("DEL") kontrol karakterleridir; EBCDIC platformlarında,
muadilleri kontrol karakterleridir.

[3] Herhangi bir karakter grafiksel, yani görünür. Bu sınıf, tüm
alfasayısal karakterler ve tüm noktalama işaretleri.

[4] Tüm grafik karakterlerin kümesi olan tüm yazdırılabilir karakterler artı bunlar
aynı zamanda kontrol olmayan boşluk karakterleri.

[5] ASCII aralığındaki "\p{PosixPunct}" ve "[[:punct:]]" tüm kontrol dışı öğelerle eşleşir,
alfasayısal, boşluk olmayan karakterler: "[-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~]" (gerçi
bir yerel ayar etkinse, "[[:punct:]]") davranışını değiştirebilir.

Benzer şekilde adlandırılan "\p{Punct}" özelliği,
ASCII aralığı, yani "[-!"#%&'()*,./:;?@[\\\]_{}]". Yani, dokuz eksik
karakterler "[$+<=>^`|~]". Bunun nedeni, Unicode'un POSIX'in kabul ettiğini ayırmasıdır.
noktalama işaretleri, noktalama işaretleri ve semboller olmak üzere iki kategoriye ayrılır.

"\p{XPosixPunct}" ve (Unicode kuralları altında) "[[:punct:]]", "\p{PosixPunct}" ile eşleşir
ASCII aralığındaki eşleşmeler artı "\p{Punct}" ile eşleşenler. Bu farklı
"\p{Punct}" ile kesinlikle eşleşir. Bunu söylemenin başka bir yolu, eğer Unicode
kurallar yürürlüktedir, "[[:punct:]]", Unicode'un dikkate aldığı tüm karakterlerle eşleşir
noktalama işaretleri ve ayrıca Unicode'un semboller olarak kabul ettiği tüm ASCII aralığı karakterleri.

[6] "\p{XPerlSpace}" ve "\p{Space}", Perl v5.18 ile başlayarak aynı şekilde eşleşir. İçinde
önceki sürümler, bunlar yalnızca yerel olmayan eşleştirmede farklılık gösterir, "\p{XPerlSpace}"
dikey sekme "\cK" ile eşleşmedi. Yalnızca ASCII aralık formları için aynıdır.

Tabloda listelenen isimlerin yanı sıra kullanılabilecek başka çeşitli eş anlamlılar da vardır.
Örneğin, "\p{PosixAlpha}", "\p{Alpha}" olarak yazılabilir. Hepsi şurada listelenmiştir:
Perluniprops'ta "\p{} ve \P{} aracılığıyla erişilebilen özellikler".

Her iki "\p" karşılığı, her zaman Unicode kurallarının yürürlükte olduğunu varsayar. ASCII platformlarında,
bu, 128'den 255'e kadar olan kod noktalarının Latin-1 olduğunu varsaydıkları anlamına gelir ve bu şu anlama gelir:
yerel ayarın Latin-1 olduğu garanti edilmedikçe, bunları yerel ayar kuralları altında kullanmanın akıllıca olmadığı
veya UTF-8. Buna karşılık, POSIX karakter sınıfları, yerel ayar kuralları altında kullanışlıdır. Onlar
yürürlükteki gerçek kurallardan aşağıdaki şekilde etkilenir:

"/a" değiştiricisi etkinse ...
POSIX sınıflarının her biri, ASCII aralığı karşılıklarıyla tam olarak aynı şekilde eşleşir.

aksi halde ...
255'in üzerindeki kod noktaları için ...
POSIX sınıfı, Tam aralıklı karşılığıyla aynı şekilde eşleşir.

256'nın altındaki kod noktaları için ...
yerel kurallar yürürlükteyse ...
POSIX sınıfı, aşağıdakiler dışında yerel ayara göre eşleşir:

"Kelime"
ne olursa olsun platformun yerel alt çizgi karakterini de içerir
yerel ayardır.

"asci"
POSIX "ascii" uzantısına sahip olmayan platformlarda, bu eşleşir
yalnızca platformun yerel ASCII aralığı karakterleri.

"boşluk"
POSIX "boş" uzantısına sahip olmayan platformlarda bu,
sadece platformun yerel sekmesi ve boşluk karakterleri.

Unicode kuralları yürürlükteyse ...
POSIX sınıfı, Tam aralıklı muadili ile aynı şekilde eşleşir.

aksi halde ...
POSIX sınıfı, ASCII aralığı karşılığıyla aynı şekilde eşleşir.

Hangi kuralların uygulanacağı "Hangi karakter kümesi değiştiricisi
etkisi?" Perlre'de.

Perl'in gelecekteki bir sürümünde bu davranışın değiştirilmesi önerilir, böylece
Unicode kuralları yürürlüktedir, davranışı değiştirmez: Yerel ayarın dışında, POSIX
sınıflar, ASCII aralığı benzerleri gibi davranırdı. Bu konuda yorum yapmak isterseniz
teklif, e-posta gönder "perl5-porters@perl.org".

POSIX karakter sınıflarının olumsuzlanması

POSIX karakter sınıfının bir Perl uzantısı, onu olumsuzlama yeteneğidir. Bu tarafından yapılır
sınıf adının önüne bir şapka ("^") koyarak. Bazı örnekler:

POSIX ASCII aralığı Tam aralıklı ters eğik çizgi
Unicode Unicode dizisi
-------------------------------------------------- ---
[[:^digit:]] \P{PosixDigit} \P{XPosixDigit} \D
[[:^space:]] \P{PosixSpace} \P{XPosixSpace}
\P{PerlSpace} \P{XPerlSpace} \S
[[:^word:]] \P{PerlWord} \P{XPosixWord} \W

Ters eğik çizgi dizisi, çeşitli özelliklere bağlı olarak ASCII- veya Tam aralıklı Unicode anlamına gelebilir.
"Hangi karakter kümesi değiştiricisi etkin?" perlre'de.

[= =] ve [. .]

Perl, "[=class=]" ve "[.class.]" POSIX karakter sınıflarını tanır, ancak tanımaz
(henüz?) onları destekleyin. Her iki yapıyı kullanma girişimi bir istisna oluşturur.

Örnekler

/[[:digit:]]/ # Rakam olan bir karakterle eşleşir.
/[01[:lower:]]/ # Bir karakterle eşleşir
# küçük harf veya '0' veya '1'.
/[[:digit:][:^xdigit:]]/ # Her şey olabilen bir karakterle eşleşir
# 'a' ile 'f' arasındaki ve 'A' ile 'a' arasındaki harfler hariç
# 'F'. Bunun nedeni ana karakter
# sınıf iki POSIX karakterinden oluşur
Birlikte OR'lenen # sınıf, bunlardan biri
# herhangi bir rakamla eşleşir ve diğeri
#, onaltılık rakam olmayan her şeyle eşleşir.
# OR, rakamları ekleyerek yalnızca
# 'a' ile 'f' arasındaki harfler ve 'A' ile 'F' arasındaki harfler hariç tutulmuştur.

genişletilmiş parantezli Karakter Sınıflar

Bu, daha okunaklı ve daha az için kullanılabilecek süslü parantez içine alınmış bir karakter sınıfıdır.
hataya açık sınıflar ve kesişim gibi küme işlemleri gerçekleştirmek için. Bir örnek

/(?[ \p{Tay} & \p{Rakam} ])/

Bu, Tayca komut dosyasındaki tüm rakam karakterleriyle eşleşecektir.

Bu, 5.18'den itibaren kullanılabilen deneysel bir özelliktir ve
onunla saha deneyimi kazanın. Kullanmaya yönelik herhangi bir girişim, aksi takdirde bir uyarı verecektir.
aracılığıyla devre dışı bırakıldı

uyarı yok "deneysel::regex_sets";

Bu özellik hakkında yorumlarınızı bekliyoruz; email gönder "perl5-porters@perl.org".

Yukarıdaki örneği genişletebiliriz:

/(?[ ( \p{Tay} + \p{Lao} ) & \p{Rakam} ])/

Bu, Tayca veya Laos alfabesindeki rakamlarla eşleşir.

Bu örneklerdeki boşluklara dikkat edin. Bu yapı her zaman "/x" değiştiricisine sahiptir
içinde açıldı.

Kullanılabilir ikili operatörler şunlardır:

& kavşak
+ birlik
| '+' için başka bir isim, dolayısıyla birlik anlamına gelir
- çıkarma (sonuç, bunlardan oluşan kümeyle eşleşir
olanlar hariç, ilk işlenen tarafından eşleşen kod noktaları
ikinci işlenen tarafından da eşleştirilir)
^ simetrik fark (birleşim eksi kesişim). Bu
özel gibi veya sonuç kod kümesi olduğu için
ikisinden biri değil, biri ile eşleşen noktalar
işlenenler.

Bir tekli operatör var:

! Tamamlayıcı

Tüm ikili operatörler ortak bıraktı; "&" diğerlerinden daha yüksek önceliğe sahiptir;
hepsi eşit önceliğe sahiptir. Tekli operatör hakkı ortaktır ve en yüksek
öncelik. Dolayısıyla bu, mantıksal operatörler için normal Perl öncelik kurallarını takip eder.
Varsayılan önceliği ve ilişkilendirilebilirliği geçersiz kılmak için parantez kullanın.

Ana kısıtlama, her şeyin bir meta karakter olmasıdır. Bu nedenle, atıfta bulunamazsınız
şöyle bir şey yaparak tek karakterler:

/(?[ a + b ])/ # Sözdizimi hatası!

Tek bir yazılabilir karakter belirtmenin en kolay yolu, onu parantez içine almaktır:

/(?[ [a] + [b] ])/

(Bu, "[ab]" ile aynı şeydir.) Eşdeğerini de söyleyebilirdiniz:

/(?[[ ab ]])/

(Elbette, "\x{...}", "\N{...}" vb. kullanarak tek karakterler belirtebilirsiniz.)

Bu son örnek, sıradan bir parantez içinde belirtmek için bu yapının kullanımını gösterir.
ek set işlemleri olmayan karakter sınıfı. İçindeki beyaz boşluğa dikkat edin; "/x"
yorum yapamamanız dışında, parantez içindeki karakter sınıflarında bile açıktır
onların içinde. Buradan,

(?[ [#] ])

"#" değişmez karakteriyle eşleşir. Değişmez bir boşluk karakteri belirtmek için şunları yapabilirsiniz:
gibi bir ters eğik çizgi ile kaçmak:

/(?[ [ aeiou \ ] ])/

Bu, İngilizce sesli harflerle SPACE karakteriyle eşleşir. Diğer tüm kaçışlar kabul edildi
normal parantez içine alınmış karakter sınıflarına göre burada da kabul edilir; ama tanınmayan kaçışlar
normal sınıflarda uyarı oluşturan hatalar burada önemli hatalardır.

Bu sınıf öğelerinden gelen tüm uyarılar ölümcüldür ve bazı uygulamalar bunu yapmaz.
şu anda uyar. mesela söyleyemezsin

/(?[ [ \xF ] ])/ # Sözdizimi hatası!

Parantezsiz bir "\x"den sonra iki onaltılık basamağa sahip olmanız gerekir (iki yapmak için baştaki sıfır kullanın).
Bu kısıtlamalar, sınıfın neyle eşleşmemesine neden olan yazım hatalarının insidansını azaltmak içindir.
olacağını düşündün.

Normal bir parantez içine alınmış karakter sınıfı bir "\p{}" veya "\P{}" içeriyorsa ve bununla eşleştirilirse
Unicode olmayan bir kod noktası, sonuç Unicode tanımlı olmadığı için bir uyarı verilebilir.
Bu genişletilmiş formu kullanırken böyle bir uyarı gelmeyecektir.

Normal parantez içine alınmış karakter sınıfları ile bunlar arasındaki son fark,
bunların çok karakterli bir kıvrımla eşleşmesini sağlamak mümkün değil. Böylece,

/(?[ [\xDF] ])/iu

"ss" dizesiyle eşleşmiyor.

POSIX sınıf adlarını çift parantez içine almak zorunda değilsiniz, dolayısıyla her ikisi de
aşağıdaki çalışma:

/(?[ [:kelime:] - [:alt:] ])/
/(?[ [[:kelime:]] - [[:alt:]] ])/

"\w" ve "\D" gibi şeyler de dahil olmak üzere, içerilen herhangi bir POSIX karakter sınıfı,
"/a" (ve "/aa") değiştiricileri.

"(?[ ])" bir normal ifade derleme zamanı yapısıdır. olmayan bir şeyi kullanma girişimi
içeren düzenli ifadenin derlendiği sırada bilinebilir olması önemli bir hatadır. İçinde
pratik, bu sadece üç sınırlama anlamına gelir:

1. Bu yapı, "yerel ayarı kullan" (veya "/l" normal ifadesi) kapsamında kullanılamaz.
değiştirici).

2. Kullanılan herhangi bir kullanıcı tanımlı özellik, normal kullanım zamanına kadar önceden tanımlanmış olmalıdır.
ifade derlenir (ancak bu yapının bunun yerine kullanılabileceğini unutmayın)
özellikleri).

3. Aksi takdirde "/d" kuralları kullanılarak derlenecek olan ve
bu yapı bunun yerine "/u" kullanacaktır. Böylece bu yapı Perl'e yapmadığınızı söyler.
onu içeren tüm normal ifade için "/ d" kuralları istiyorum.

Boşluğu atlamanın yalnızca bu yapının iç kısmı için geçerli olduğunu unutmayın. olmalı
Baştaki "(?[" karakterini oluşturan karakterler arasında boşluk olmamalıdır.
kapanış "])" karakterleri arasında boşluk bırakın.

Tüm normal ifadelerde olduğu gibi, model değişkenler dahil edilerek oluşturulabilir.
bunlar regex derleme zamanında enterpolasyonludur. emin olmak için özen gösterilmelidir.
beklediğin şeyi alıyorsun. Örneğin:

benim $thai_or_lao = '\p{Tay} + \p{Lao}';
Kendi ID’n ile mağazalarını oluştur
qr/(?[ \p{Rakam} & $thai_or_lao ])/;

derlemek

qr/(?[ \p{Rakam} & \p{Tay} + \p{Lao} ])/;

Ancak bu, kodu okuyan birinin muhtemelen bekleyeceği bir etkiye sahip değildir, çünkü
kesişim, Laos hariç, yalnızca "\p{Tay}" için geçerlidir. Bunun gibi tuzaklar
bileşen parçalarını parantez içine alarak önlenebilir:

benim $thai_or_lao = '( \p{Tay} + \p{Lao} )';

Ancak herhangi bir değiştirici yine de tüm bileşenler için geçerli olacaktır:

benim $lower = '\p{Düşük} + \p{Rakam}';
qr/(?[ \p{Yunanca} ve $düşük ])/i;

büyük harfli şeylerle eşleşir. Bileşenleri içine alarak sürprizlerden kaçınabilirsiniz.
bunları derleyerek bu yapının örnekleri:

benim $thai_or_lao = qr/(?[ \p{Tay} + \p{Lao} ])/;
benim $düşük = qr/(?[ \p{Düşük} + \p{Rakam} ])/;

Bunlar başka bir kalıba gömüldüğünde, eşleştikleri şey ne olursa olsun değişmez.
parantez veya bu dış düzende hangi değiştiricilerin etkin olduğu.

Perl'in şeyleri ayrıştırma şekli nedeniyle, parantez ve parantezlerinizin
dengeli, hatta yorumlar dahil. Herhangi bir örnekle karşılaşırsanız, lütfen onları gönderin.
"perlbug@perl.org", böylece bu man sayfasına somut bir örnek verebiliriz.

Normal parantez içine alınmış karakterde yasal olarak kalan şeyler kullanılacak şekilde değiştirebiliriz.
sınıflar bu deneysel yapı içinde geçersiz hale gelebilir. için bir teklif,
örneğin, "(?[ [aa] ])"deki gibi aynı karakterin bitişik kullanımlarını yasaklamaktır. bu
böyle bir değişiklik için motivasyon, ikinci "a"nın eklediği gibi, bu kullanımın büyük olasılıkla bir yazım hatası olmasıdır.
hiçbir şey.

onworks.net hizmetlerini kullanarak perlrecharclass'ı çevrimiçi kullanın



En yeni Linux ve Windows çevrimiçi programları