Normal ifadeler (C++)
C++ standart kitaplığı birden çok normal ifade dil bilgisini destekler. Bu konu, normal ifadeler kullanılırken kullanılabilen dil bilgisi çeşitlemelerini açıklar.
Normal ifade dil bilgisi
Kullanılacak normal ifade dil bilgisi, numaralandırma değerlerinden std::regex_constants::syntax_option_type
birinin kullanımıyla belirtilir. Bu normal ifade dil bilgisi içinde std::regex_constants
tanımlanır:
- ECMAScript: Bu, JavaScript ve .NET dilleri tarafından kullanılan dil bilgisi ile en yakın olandır.
- basic: POSIX basic normal ifadeleri veya BRE.
- extended: POSIX extended normal ifadeleri veya ERE.
- awk: Bu , extendedancak yazdırılmayan karakterler için daha fazla kaçış içeriyor.
- grep: Bu , basicancak yeni satır (
\n
) karakterlerin değişiklikleri ayırmasına da izin verir. - egrep: Bu , extendedancak yeni satır karakterlerinin değişiklikleri ayırmasına da olanak tanır.
Varsayılan olarak, dil bilgisi belirtilmezse varsayılır ECMAScript . Yalnızca bir dil bilgisi belirtilebilir.
Çeşitli bayraklar da uygulanabilir:
icase
: Eşleştirirken büyük/küçük harf yoksayın.nosubs
: İşaretli eşleşmeleri yoksay (parantez içindeki ifadeler); hiçbir değiştirme depolanmaz.optimize
: Daha büyük bir inşaat süresine bağlı olarak eşleştirmeyi daha hızlı yapın.collate
: Yerel ayara duyarlı harmanlama dizilerini kullanın (örneğin, formun[a-z]
aralıkları).
Normal ifade altyapısı davranışını belirtmek için sıfır veya daha fazla bayrak dil bilgisi ile birleştirilebilir. Yalnızca bayraklar belirtilirse, ECMAScript dil bilgisi olarak kabul edilir.
Öğe
Öğe aşağıdakilerden biri olabilir:
Hedef dizideki aynı karakterle eşleşen sıradan bir karakter.
Yeni satır dışında hedef dizideki herhangi bir karakterle eşleşen joker karakter
'.'
.formun
[expr]
, ifadesi tarafından tanımlanan kümede de bulunan hedef dizideki bir karakter veya harmanlama öğesiyle eşleşen, ya da formun[^expr]
, ifadesiexpr
tarafından tanımlanan kümede yer alan ve hedef dizideki bir karakterle veya harmanlama öğesiyle eşleşen köşeli ayraç ifadesiexpr
.İfade
expr
aşağıdakilerin herhangi bir bileşimini içerebilir:Tek bir karakter. karakteri tarafından
expr
tanımlanan kümeye ekler.formunun
ch1-ch2
karakter aralığı. Kapalı aralıktaki[ch1, ch2]
değerlerle temsil edilen karakterleri tarafındanexpr
tanımlanan kümeye ekler.formunun
[:name:]
karakter sınıfı. Adlandırılmış sınıftaki karakterleri tarafındanexpr
tanımlanan kümeye ekler.formunun
[=elt=]
denklik sınıfı. tarafındanexpr
tanımlanan kümeyeelt
eşdeğer harmanlama öğelerini ekler.formunun
[.elt.]
harmanlama simgesi. harmanlama öğesinielt
tarafındanexpr
tanımlanan kümeye ekler.
Bir çapa. Tutturucu
^
, hedef sıranın başlangıcıyla eşleşir. Tutturucu$
, hedef sıranın sonuyla eşleşir.
ve grepiçindeki formun yakalama grubu (alt ifade) veya sınırlayıcılar arasındaki desenle eşleşen hedef dizideki karakter dizisiyle eşleşen \(alt ifade\).basic
- Formun
\k
, hedef dizideki karakterlek
eşleşen kimlik kaçışı.
Örnekler:
a
hedef diziyle"a"
eşleşir ancak ,"b"
veya"c"
hedef dizileriyle"B"
eşleşmez..
,"B"
"b"
ve"c"
tüm hedef dizileriyle eşleşir"a"
.[b-z]
hedef sıralarla eşleşir"b"
ve"c"
hedef sıralarla"a"
veya"B"
ile eşleşmez.[:lower:]
,"b"
ve"c"
hedef dizileriyle"a"
eşleşir, ancak hedef dizisiyle"B"
eşleşmez.(a)
hedef diziyle"a"
eşleşir ve yakalama grubu 1'i alt dizisiyle"a"
ilişkilendirir, ancak hedef sıraları"B"
,"b"
veya"c"
ile eşleşmez.
, ve içinde ECMAScriptbir öğe, formun \dd
geri başvurusu da olabilir. Buradadd
, hedef dizideki N. yakalama grubuyla eşleşen karakter dizisiyle aynı karakter dizisiyle eşleşen bir ondalık N değerini temsil grepeder. basic
Örneğin, (a)\1
ilk (ve yalnızca) yakalama grubu ilk diziyle "aa"
ve ardından son diziyle eşleşdiğinden hedef diziyle "a"
\1
"a"
eşleşir.
içinde ECMAScriptbir öğe de aşağıdakilerden biri olabilir:
Formun yakalama olmayan bir grubu (?: alt ifade). Sınırlayıcı arasındaki desen tarafından eşleştirilen hedef dizideki karakterlerin dizisiyle eşleşir.
, ,
\n
\t
\r
veya\v
biçiminde\f
sınırlı bir dosya biçimi kaçışı. Bunlar hedef dizide sırasıyla bir form besleme, yeni satır, satır başı, yatay sekme ve dikey sekme ile eşleşir.Formun pozitif onayı (= alt ifade). Sınırlayıcılar arasındaki desenle eşleşen, ancak hedef dizideki eşleşme konumunu değiştirmeyen, hedef dizideki karakter dizisiyle eşleşir.
Formun negatif onayı (! alt ifade). Sınırlayıcılar arasındaki desenle eşleşmeyen ve hedef dizideki eşleşme konumunu değiştirmeyen, hedef dizideki herhangi bir karakter dizisiyle eşleşir.
formunun
\xhh
onaltılık kaçış dizisi. hedef dizisindeki iki onaltılık basamakla temsil edilen bir karakterle eşleşirhh
.formunun
\uhhhh
unicode kaçış dizisi. Hedef dizideki dört onaltılık basamakla temsil edilen bir karakterle eşleşirhhhh
.formunun
\ck
denetim kaçış dizisi. karakteri tarafından adlandırılan denetim karakteriylek
eşleşir.Formun
\b
sözcük sınırı onayı. Hedef dizideki geçerli konum bir sözcük sınırından hemen sonra olduğunda eşleşir.formunun
\B
negatif sözcük sınırı onayı. Hedef dizideki geçerli konum bir sözcük sınırından hemen sonra olmadığında eşleşir.,
\W
\s
\w
\D
\S
biçiminde\d
dsw karakter çıkışı. Bir karakter sınıfı için kısa bir ad sağlar.
Örnekler:
(?:a)
hedef dizisiyle"a"
eşleşir, ancak"(?:a)\1"
yakalama grubu 1 olmadığından geçersizdir.(=a)a
hedef dizisiyle eşleşir"a"
. Pozitif onay, hedef dizideki ilk diziyle"a"
, normal ifadedeki son"a"
ise hedef dizideki ilk diziyle"a"
eşleşir.(!a)a
hedef dizisiyle"a"
eşleşmiyor.a\b.
hedef dizisiyle"a~"
eşleşir, ancak hedef dizisiyle"ab"
eşleşmez.a\B.
hedef dizisiyle"ab"
eşleşir, ancak hedef dizisiyle"a~"
eşleşmez.
içinde awkbir öğe de aşağıdakilerden biri olabilir:
, , ,
\b
\a
,\f
,\r
\t
\n
veya\v
biçimindeki\\
bir dosya biçimi kaçışı. Bunlar hedef dizide sırasıyla ters eğik çizgi, uyarı, geri al, bir form besleme, yeni satır, satır başı, yatay sekme ve dikey sekme ile eşleşir.formunun
\ooo
sekizli kaçış dizisi. Gösterimi bir, iki veya üç sekizli basamakla temsil edilen değer olan hedef dizideki bir karakterle eşleşirooo
.
Repetition (Tekrar Sayısı)
Pozitif onay, negatif onay veya yer işareti dışındaki herhangi bir öğeyi yineleme sayısı takip edebilir. En genel yineleme sayısı türü ve içindeki {min,max} veya \{min,max\} basic biçimini alır.grep Bu yineleme sayısı biçiminin takip ettiği bir öğe, öğeyle eşleşen bir dizinin en az en az ardışık oluşumlarıyla ve en fazla üst ardışık oluşumlarıyla eşleşir.
Örneğin, a{2,3}
hedef diziyle "aa"
ve hedef dizisiyle "aaa"
eşleşir, ancak hedef dizisiyle veya hedef dizisiyle "a"
"aaaa"
eşleşmez.
Bir yineleme sayısı aşağıdaki biçimlerden birini de alabilir:
ve içinde {min} veya \{min}grepbasic {min,min} ile eşdeğerdir.
ve içinde {min,} veya \{minbasic,\} .grep {min,unbounded} ile eşdeğerdir.
*
{0,unbounded} ile eşdeğerdir.
Örnekler:
a{2}
hedef diziyle"aa"
eşleşir, ancak hedef diziyle"a"
veya hedef diziyle eşleşmez"aaa"
.a{2,}
hedef dizisi , hedef dizisi"aa"
"aaa"
vb. ile eşleşir, ancak hedef dizisiyle"a"
eşleşmez.a*
, hedef dizisi""
, hedef dizisi"a"
, hedef dizisi"aa"
vb. ile eşleşir.
ve grepdışındaki basic tüm dil bilgisi için yineleme sayısı aşağıdaki formlardan birini de alabilir:
?
eşdeğeri, {0,1} olur.+
{1,unbounded} ile eşdeğerdir.
Örnekler:
a?
hedef dizisiyle""
ve hedef dizisiyle"a"
eşleşir, ancak hedef dizisiyle"aa"
eşleşmez.a+
hedef dizisi , hedef dizisi"a"
"aa"
vb. ile eşleşir, ancak hedef dizisiyle""
eşleşmez.
içindeECMAScript, yineleme sayısının tüm biçimlerini doyumsuz olmayan bir yinelemeyi tanımlayan karakter ?
takip edebilir.
Bitiştirme
Yineleme sayıları olan veya olmayan normal ifade öğeleri, daha uzun normal ifadeler oluşturmak için birleştirilebilir. Sonuçta elde edilen ifade tek tek öğeler tarafından eşleştirilen dizilerin bir bitiştirmesi olan bir hedef dizisiyle eşleşir.
Örneğin, a{2,3}b
hedef diziyle ve hedef dizisiyle "aab"
"aaab"
eşleşir, ancak hedef dizisiyle veya hedef dizisiyle "ab"
"aaaab"
eşleşmez.
Değişim
ve grepdışındaki basic tüm normal ifade dilbilgisinde, birleştirilmiş normal ifadeyi karakter |
(kanal) ve başka birleştirilmiş normal ifade takip edebilir. Herhangi bir sayıdaki bitişik normal ifadeler bu şekilde birleştirilebilir. Sonuçta elde edilen ifade, bitişik normal ifadelerin bir veya daha fazlasını eşleyen herhangi bir hedef dizisiyle eşleşir.
Birleştirilmiş normal ifadelerden birden fazlası hedef diziyle eşleştiğinde, ECMAScript diziyle eşleşme olarak eşleşen birleştirilmiş normal ifadelerden ilkini seçer ve bu, ilk eşleşme olarak adlandırılır. Diğer normal ifade dil bilgisi, en uzun eşleşmeyi elde edeni seçer.
Örneğin, ab|cd
hedef diziyle ve hedef dizisiyle "ab"
"cd"
eşleşir, ancak hedef dizisiyle veya hedef dizisiyle "abd"
"acd"
eşleşmez.
ve egrepiçindegrep, değişiklikleri ayırmak için yeni satır karakteri (\n
) kullanılabilir.
Subexpression
ve grepiçindebasic, alt ifade bir birleştirmedir. Diğer normal ifade dilbilgisinde bir alt ifade bir değişimdir.
Dil bilgisi özeti
Çeşitli normal ifade dilbilgisi sistemlerinde kullanılabilen özellikler aşağıdaki tabloda özetlenmiştir:
Öğe | basic | extended | ECMAScript | grep | egrep | awk |
---|---|---|---|---|---|---|
alternation using | |
+ | + | + | + | ||
alternation using \n |
+ | + | ||||
yer işareti | + | + | + | + | + | + |
yeniden başvuru | + | + | + | |||
köşeli ayraç ifadesi | + | + | + | + | + | + |
kullanarak yakalama grubu () |
+ | + | + | + | ||
kullanarak yakalama grubu \(\) |
+ | + | ||||
denetim çıkış dizisi | + | |||||
dsw karakter çıkışı | + | |||||
dosya biçimi çıkışı | + | + | ||||
onaltılık çıkış dizisi | + | |||||
kimlik çıkışı | + | + | + | + | + | + |
negatif onay | + | |||||
negatif sözcük sınırı onayı | + | |||||
yakalama olmayan grup | + | |||||
doyumsuz olmayan yineleme | + | |||||
sekizli çıkış dizisi | + | |||||
normal karakter | + | + | + | + | + | + |
pozitif onay | + | |||||
kullanarak yineleme {} |
+ | + | + | + | ||
kullanarak yineleme \{\} |
+ | + | ||||
kullanarak yineleme * |
+ | + | + | + | + | + |
ve kullanarak ? yineleme + |
+ | + | + | + | ||
unicode çıkış dizisi | + | |||||
joker karakter | + | + | + | + | + | + |
sözcük sınırı onayı | + |
Anlamsal ayrıntılar
Bağlayıcı
Bir yer işareti hedef dizideki bir karakter ile değil, konumla eşleşir. A ^
, hedef dizenin başlangıcıyla, bir $
ise hedef dizenin sonuyla eşleşir.
Geri başvurusu
Geri başvuru, arkasından ondalık değer N gelen bir ters eğik çizgidir. N. yakalama grubunun içeriğiyle eşleşir. N değeri, yeniden başvuruyu önceleyen yakalama gruplarının sayısından daha fazla olmamalıdır. ve grepiçindebasic, N değeri ters eğik çizgiden sonra gelen ondalık basamak tarafından belirlenir. içinde ECMAScript, N değeri ters eğik çizginin hemen ardından gelen tüm ondalık basamaklar tarafından belirlenir. Bu nedenle ve grepiçindebasic, normal ifadede dokuzdan fazla yakalama grubu olsa bile N değeri hiçbir zaman 9'dan fazla olmaz. içinde ECMAScript, N değeri ilişkisizdir.
Örnekler:
((a+)(b+))(c+)\3
hedef dizisiyle eşleşir"aabbbcbbb"
. Geri başvurusu\3
üçüncü yakalama grubundaki metinle,yani ile eşleşir"(b+)"
. hedef dizisiyle"aabbbcbb"
eşleşmiyor.(a)\2
geçerli değil.(b(((((((((a))))))))))\10
içinde ve içinde basic ECMAScriptfarklı anlamlara sahiptir. içinde basic, geri başvurusu şeklindedir\1
. Geri başvurusu, ilk yakalama grubunun içeriğiyle(b
eşleşir (yani, ile başlayıp sonla)
biten ve geri başvurusundan önce gelen) ve son0
, normal karakterle0
eşleşir. içinde ECMAScript, geri başvurusu şeklindedir\10
. Onuncu yakalama grubunu, diğer bir deyişle, en içtekiyle eşleşir.
Köşeli ayraç ifadesi
Köşeli ayraç ifadesi bir karakter kümesini ve harmanlama öğelerini tanımlar. Köşeli ayraç ifadesi karakterle ^
başladığında, kümedeki hiçbir öğe hedef dizideki geçerli karakterle eşleşmiyorsa eşleşme başarılı olur. Aksi halde, eşleme yalnızca kümedeki öğelerden biri hedef dizideki geçerli karakterle eşleşiyorsa başarılı olur.
Karakter kümesi tek tek karakterlerin, karakter aralıklarının, karakter sınıflarının, denklik sınıflarının ve harmanlama simgelerinin herhangi bir bileşimi listelenerek tanımlanabilir.
Yakalama grubu
Bir yakalama grubu kendi içeriğini normal ifade dilbilgisi içinde tek bir birim olarak işaretler ve içeriğini eşleyen hedef metni etiketler. Her bir yakalama grubuyla ilişkili etiket, yakalama gruplarını işaretleyen sol parantezler, geçerli yakalama grubunu işaretleyen sol parantezler de dahil sayılarak belirlenen bir sayıdır. Bu uygulamada, yakalama gruplarının en yüksek sayısı 31'dir.
Örnekler:
ab+
hedef dizisiyle"abb"
eşleşir, ancak hedef dizisiyle"abab"
eşleşmez.(ab)+
hedef dizisiyle"abb"
eşleşmez, ancak hedef dizisiyle"abab"
eşleşir.((a+)(b+))(c+)
hedef diziyle"aabbbc"
eşleşir ve yakalama grubu 1'i alt"aabbb"
sorguyla ilişkilendirir, yakalama grubu 2'yi alt"aa"
sorguyla, yakalama grubu 3'ü ile"bbb"
ve yakalama grubu 4'ü alt dizisiyle ilişkilendirir"c"
.
Karakter sınıfı
Köşeli ayraç ifadelerindeki bir karakter sınıfı, adlandırılan sınıftaki tüm karakterleri köşeli ayraç ifadesi tarafından tanımlanan karakter kümesine ekler. Karakter sınıfı oluşturmak için, ardından sınıfın adını ve ardından :]
öğesini kullanın[:
.
Dahili olarak, karakter sınıflarının adları çağrılarak id = traits.lookup_classname
tanınır. True döndürürse traits.isctype(ch, id)
bir karakter ch
böyle bir sınıfa aittir. Varsayılan regex_traits
şablon, aşağıdaki tabloda yer alan sınıf adlarını destekler.
Sınıf Adı | Açıklama |
---|---|
alnum |
küçük harfler, büyük harfler ve rakamlar |
alpha |
küçük harfler ve büyük harfler |
blank |
boşluk veya sekme |
cntrl |
dosya biçimi kaçış karakterleri |
digit |
rakamlar |
graph |
küçük harfler, büyük harfler, rakamlar ve noktalama işareti |
lower |
küçük harfler |
print |
küçük harfler, büyük harfler, rakamlar, noktalama işareti ve boşluk |
punct |
noktalama işareti |
space |
space |
upper |
büyük harf karakterler |
xdigit |
rakamlar, a , b , , c , d , e , f , A , B , D C , E F |
d |
aynı digit |
s |
aynı space |
w |
aynı alnum |
Karakter aralığı
Köşeli ayraç ifadelerindeki bir karakter aralığı, aralıktaki tüm karakterleri köşeli ayraç ifadesi tarafından tanımlanan karakter kümesine ekler. Karakter aralığı oluşturmak için, karakteri '-'
aralıktaki ilk ve son karakterler arasına yerleştirin. Karakter aralığı, ilk karakterin sayısal değerinden büyük veya buna eşit ve son karakterin sayısal değerinden küçük veya buna eşit olan sayısal değere sahip tüm karakterleri kümeye yerleştirir. Bu eklenen karakter kümesinin karakterlerin platforma özgü temsiline bağlı olduğunu unutmayın. Karakter '-'
köşeli ayraç ifadesinin başında veya sonunda ya da karakter aralığının ilk veya son karakteri olarak oluşuyorsa, kendisini temsil eder.
Örnekler:
[0-7]
{0
, ,1
, ,2
,3
,4
,5
,6
}7
karakter kümesini temsil eder. hedef dizileri"0"
,"1"
vb. ile eşleşir, ancak eşleşmez"a"
.ASCII karakter kodlaması kullanan sistemlerde {
[h-k]
, ,i
,j
k
}h
karakter kümesini temsil eder. Hedef dizileri"h"
,"i"
vb. ile eşleşir, ancak veya ile"0"
eşleşmez"\x8A"
.EBCDIC karakter kodlaması kullanan sistemlerde { , , , ,
'\x8B'
'\x8A'
'\x8E'
'\x8C'
'\x8D'
,'\x8F'
, ,'\x90'
, , }k
j
(h
olarak kodlanır vek
olarak0x92
0x88
kodlanır) karakter kümesini temsil eder.i
[h-k]
h
Hedef dizileri"h"
, ,"i"
"\x8A"
vb. ile eşleşir, ancak eşleşmez"0"
.[-0-24]
{ , ,0
,2
1
,4
}-
karakter kümesini temsil eder.[0-2-]
{ , ,1
,2
-
}0
karakter kümesini temsil eder.ASCII karakter kodlaması kullanan sistemlerde {
[+--]
}+
,
-
karakter kümesini temsil eder.
Ancak, yerel ayar duyarlı aralıklar kullanıldığında, bir aralıktaki karakterler yerel ayara yönelik harmanlama kuralları tarafından belirlenir. Aralığın açıklamasındaki ilk karakterden sonrasını ve aralığın açıklamasındaki son karakterden öncesini harmanlayan karakterler küme içindedir. İki uçlu karakterler de kümededir.
Harmanlama öğesi
Bir harmanlama öğesi tek bir karakter olarak ele alınan çoklu bir karakter dizisidir.
Harmanlama simgesi
Köşeli ayraç ifadesindeki harmanlama simgesi, kümeye köşeli ayraç ifadesi tarafından tanımlanan bir harmanlama öğesi ekler. Harmanlama simgesi oluşturmak için, [.
ardından harmanlama öğesini ve ardından .]
Denetim kaçış dizisi
Denetim kaçış dizisi, ters eğik çizgi ve ardından harflerden 'c'
birinin 'a'
aracılığıyla veya 'A'
üzerinden 'z'
geçmesidir'Z'
. Harf ile adlandırılan ASCI denetim karakteriyle eşleşir. Örneğin, "\ci"
değeri Ctrl+I olduğundan hedef dizisiyle "\x09"
eşleşir 0x09
.
DSW karakter kaçışı
Bir dsw karakter çıkışı, aşağıdaki tabloda gösterildiği gibi bir karakter sınıfının kısa adıdır.
Çıkış Sırası | Denk Adlandırılmış Sınıf | Varsayılan Adlandırılmış Sınıf |
---|---|---|
\d |
[[:d:]] |
[[:digit:]] |
\D |
[^[:d:]] |
[^[:digit:]] |
\s |
[[:s:]] |
[[:space:]] |
\S |
[^[:s:]] |
[^[:space:]] |
\w |
[[:w:]] |
[a-zA-Z0-9_] * |
\W |
[^[:w:]] |
[^a-zA-Z0-9_] * |
*ASCII karakter kümesi
Denklik sınıfı
Köşeli ayraç ifadesindeki denklik sınıfı, eşdeğerlik sınıfı tanımındaki harmanlama öğesine eşdeğer olan tüm karakterleri ve harmanlama öğelerini köşeli ayraç ifadesi tarafından tanımlanan kümeye ekler.
Denklik sınıfı oluşturmak için, [=
ardından bir harmanlama öğesi ve ardından =]
kullanın. dahili olarak, iki harmanlama öğesi elt1
ve elt2
ise traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end())
eşdeğerdir.
Dosya biçimi kaçışı
Dosya biçiminde kaçış, normal C dili karakter kaçış dizilerinden oluşur: , \\
, , , , , \r
, \t
, \v
. \n
\f
\b
\a
Bunlar sırasıyla normal anlamlara sahiptir; yani ters eğik çizgi, uyarı, geri al, form akışı, yeni satır, satır başı, yatay sekme ve dikey sekme. \a
içinde ECMAScriptve \b
izin verilmez. (\\
izin verilir, ancak bu bir kimlik kaçışıdır, dosya biçimi kaçışı değildir).
Onaltılık kaçış dizisi
Onaltılık kaçış dizisi, ters eğik çizgi ve ardından iki onaltılık basamak (0-9a-fA-F
) harfidirx
. İki basamak tarafından belirtilen değere sahip hedef dizideki bir karakterle eşleşir.
Örneğin, "\x41"
ASCII karakter kodlaması kullanıldığında hedef diziyle "a"
eşleşir.
Kimlik kaçışı
Kimlik çıkışı, ardından tek bir karakter gelen bir ters eğik çizgidir. Bu karakterle eşleşir. Karakterin özel bir anlamı olduğunda gereklidir. Kimlik kaçışını kullanmak özel anlamı kaldırır. Örneğin:
a*
hedef dizisiyle"aaa"
eşleşir, ancak hedef dizisiyle"a*"
eşleşmez.a\*
hedef dizisiyle"aaa"
eşleşmez, ancak hedef dizisiyle"a*"
eşleşir.
Bir kimlik çıkışında izin verilen karakterlerin kümesi, aşağıdaki tabloda gösterildiği gibi normal ifade dilbilgisine bağlıdır.
Dilbilgisi | İzin Verilen Kimlik Çıkışı Karakterleri |
---|---|
basic, grep | { ( $ ^ * [ } \ ) { . } |
extended, egrep | { ( | ? + $ ^ \ . * ) { [ } |
awk, extended | plus { " / } |
ECMAScript | Bir tanımlayıcının parçası olabilenler dışındaki tüm karakterler. Bu genellikle harfler, basamaklar, $ , _ ve unicode kaçış dizilerini içerir. Daha fazla bilgi için bkz ECMAScript . Dil Belirtimi. |
Tek tek karakter
Köşeli ayraç ifadelerindeki tekil karakter, söz konusu karakteri köşeli ayraç ifadesi tarafından tanımlanan karakter kümesine ekler. Köşeli ayraç ifadesinin başındakiler dışında herhangi bir ^
yerde kendisini temsil eder.
Örnekler:
[abc]
,"b"
ve"c"
hedef dizileriyle"a"
eşleşir, ancak dizisiyle"d"
eşleşmez.[^abc]
hedef dizisiyle"d"
eşleşir, ancak hedef sıraları ,"b"
veya"c"
ile eşleşmez"a"
.[a^bc]
, ,"b"
"c"
ve"^"
hedef dizileriyle"a"
eşleşir, ancak hedef dizisiyle"d"
eşleşmez.
dışındaki ECMAScripttüm normal ifade dil bilgilerinde, a, açma [
işlemini izleyen ilk karakterse ]
veya ilk ^
karakteri izleyen ilk karakterse, kendisini temsil eder.
Örnekler:
[]a
geçersiz çünkü köşeli ayraç ifadesini sonlandırmak için bir şey yok]
.[]abc]
, ,"b"
"c"
ve"]"
hedef dizileriyle"a"
eşleşir, ancak hedef dizisiyle"d"
eşleşmez.[^]abc]
hedef dizisiyle"d"
eşleşir, ancak , ,"b"
"c"
veya"]"
hedef dizileriyle eşleşmez"a"
.
içindeECMAScript, köşeli ayraç ifadesindeki karakteri ]
temsil etmek için kullanın\]
.
Örnekler:
[]a
köşeli ayraç ifadesi boş olduğundan hedef diziyle"a"
eşleşir.[\]abc]
, ,"b"
"c"
ve"]"
hedef dizileriyle"a"
eşleşir, ancak hedef dizisiyle"d"
eşleşmez.
Negatif onay
Negatif onay kendi içeriği dışında bir şeyi eşlemez. Hedef dizideki herhangi bir karakteri kullanmaz.
Örneğin, (!aa)(a*)
hedef sırayı "a"
eşleştirir ve yakalama grubu 1'i alt dizisiyle ilişkilendirir "a"
. Hedef diziyle veya hedef dizisiyle "aa"
"aaa"
eşleşmiyor.
Negatif sözcük sınırı onayı
Hedef dizedeki geçerli konum bir sözcük sınırından hemen sonra değilse, negatif sözcük sınırı onayı eşleşir.
Yakalama olmayan grup
Yakalama olmayan bir grup, içeriğini normal ifade dilbilgisinde tek bir birim olarak işaretler, ancak hedef metni etiketlemez.
Örneğin, (a)(?:b)*(c)
hedef metni "abbc"
eşleştirir ve yakalama grubu 1'i alt sorguyla "a"
ilişkilendirir ve yakalama grubu 2'yi alt sorguyla ilişkilendirir "c"
.
Doyumsuz olmayan yineleme
Doyumsuz olmayan bir yineleme, deseni eşleyen hedef dizinin en kısa alt dizisini tüketir. Doyumsuz bir yineleme en uzun olanı tüketir. Örneğin, (a+)(a*b)
hedef dizisiyle eşleşir "aaab"
.
Doyumsuz olmayan bir yineleme kullanıldığında, yakalama grubu 1'i hedef sıranın başındaki alt "a"
sorguyla ilişkilendirir ve yakalama grubu 2'yi hedef dizinin sonundaki alt "aab"
sorguyla ilişkilendirir.
Doyumsuz bir eşleşme kullanıldığında, yakalama grubu 1'i alt sorguyla "aaa"
ve yakalama grubu 2'yi alt sorgu ile ilişkilendirir "b"
.
Sekizli kaçış dizisi
Sekizlik bir çıkış dizisi, ardından bir, iki veya üç sekizli basamak (0-7) gelen bir ters eğik çizgidir. Basamaklar tarafından belirtilen değere sahip hedef dizideki bir karakterle eşleşir. Tüm basamaklar 0
ise, sıra geçersizdir.
Örneğin, \101
ASCII karakter kodlaması kullanıldığında hedef diziyle "a"
eşleşir.
Sıradan karakter
Sıradan bir karakter, geçerli dil bilgisi içinde özel bir anlamı olmayan herhangi bir geçerli karakterdir.
içinde ECMAScript, aşağıdaki karakterlerin özel anlamları vardır:
^
$
\
.
*
+
?
(
)
[
]
{
}
|
ve grepiçindebasic, aşağıdaki karakterlerin özel anlamları vardır:
.
[
\
Ayrıca ve grepiçindebasic, aşağıdaki karakterlerin belirli bir bağlamda kullanıldığında özel anlamları vardır:
*
normal ifadedeki ilk karakter veya normal ifadedeki bir ilk karakteri izleyen ilk karakter^
ya da yakalama grubunun ilk karakteri veya yakalama grubundaki bir ilk^
karakteri izleyen ilk karakter dışında her durumda özel bir anlamı vardır.^
normal ifadenin ilk karakteri olduğunda özel bir anlamı vardır.$
normal ifadenin son karakteri olduğunda özel bir anlamı vardır.
, egrepve awkiçindeextended, aşağıdaki karakterlerin özel anlamları vardır:
.
[
\
(
*
+
?
{
|
Ayrıca , egrepve awkiçinde extendedaşağıdaki karakterlerin belirli bir bağlamda kullanıldığında özel anlamları vardır.
)
bir öncekiyle eşleştiğinde özel bir anlam ifade eder(
^
normal ifadenin ilk karakteri olduğunda özel bir anlamı vardır.$
normal ifadenin son karakteri olduğunda özel bir anlamı vardır.
Hedef dizideki aynı karakterle eşleşen bir normal karakter. Varsayılan olarak, iki karakter aynı değer tarafından temsil ediliyorsa, bu eşlemenin başarılı olduğu anlamına gelir. Büyük/küçük harfe duyarsız bir eşleşmede, iki karakter ch0
ve ch1
eğer eşleşirse traits.translate_nocase(ch0) == traits.translate_nocase(ch1)
eşleştir. Yerel ayara duyarlı bir eşleşmede, iki karakter ch0
ve ch1
varsa traits.translate(ch0) == traits.translate(ch1)
eşleştirin.
Pozitif onay
Pozitif onay içeriğiyle eşleşir, ancak hedef dizide herhangi bir karakter kullanmaz.
Örnekler:
(=aa)(a*)
hedef diziyle"aaaa"
eşleşir ve yakalama grubu 1'i alt dizisiyle ilişkilendirir"aaaa"
.(aa)(a*)
hedef diziyle"aaaa"
eşleşir ve yakalama grubu 1'i hedef sıranın başındaki alt"aa"
diziyle ilişkilendirir ve yakalama grubu 2'yi hedef dizinin sonundaki alt"aa"
diziyle ilişkilendirir.(=aa)(a)|(a)
hedef diziyle"a"
eşleşir ve yakalama grubu 1'i boş bir diziyle (pozitif onay başarısız olduğundan) ve yakalama grubu 2'yi alt dizisiyle ilişkilendirir"a"
. Ayrıca hedef diziyle"aa"
eşleşir ve yakalama grubu 1'i alt sorguyla"aa"
ve yakalama grubu 2'yi boş bir diziyle ilişkilendirir.
Unicode kaçış dizisi
Unicode kaçış dizisi, arkasından dört onaltılık basamak (0-9a-fA-F
) gelen bir 'u'
ters eğik çizgidir. Dört basamak tarafından belirtilen değere sahip hedef dizideki bir karakterle eşleşir. Örneğin, \u0041
ASCII karakter kodlaması kullanıldığında hedef diziyle "a"
eşleşir.
Joker karakter
Hedef ifadedeki, yeni bir satır dışında herhangi bir karakterle eşleşen bir joker karakter.
Sözcük sınırı
Bir sözcük sınırı aşağıdaki durumlarda oluşur:
Geçerli karakter hedef sıranın başındadır ve sözcük karakterlerinden biridir
A-Za-z0-9_
Geçerli karakter konumu hedef dizinin sonunu aşar ve hedef dizideki son karakter sözcük karakterlerinden biridir.
Geçerli karakter sözcük karakterlerinden biridir ve önceki karakter değildir.
Geçerli karakter sözcük karakterlerinden biri değildir ve önceki karakterdir.
Sözcük sınırı onayı
Bir sözcük sınırı onayı, hedef dizedeki geçerli konum bir sözcük sınırından hemen sonra olduğunda eşleşir.
Eşleştirme ve arama
Bir hedef dizisiyle eşleşecek bir normal ifade için, normal ifadenin tamamının hedef dizinin tamamıyla eşleşmesi gerekir. Örneğin, normal ifade bcd
hedef diziyle "bcd"
eşleşir, ancak hedef diziyle veya hedef diziyle "abcd"
"bcde"
eşleşmez.
Normal bir ifade aramasının başarılı olması için normal ifadeyle eşleşen hedef dizide herhangi bir yerde bir alt dizi olmalıdır. Arama genellikle en soldaki eşleşen alt diziyi bulur.
Örnekler:
Hedef dizideki normal ifade
bcd
araması başarılı olur ve tüm diziyle"bcd"
eşleşir. Hedef dizideki"abcd"
aynı arama da başarılı olur ve son üç karakterle eşleşir. Hedef dizideki"bcde"
aynı arama da başarılı olur ve ilk üç karakterle eşleşir.Hedef dizideki
"bcdbcd"
normal ifadebcd
araması başarılı olur ve ilk üç karakterle eşleşir.
Hedef dizideki bir konumda eşleşen birden fazla alt sorgu varsa, eşleşen deseni seçmenin iki yolu vardır.
İlk eşleşme , normal ifade eşleştirildiğinde ilk olarak bulunan alt sorguyu seçer.
En uzun eşleşme , bu konumda eşleşenlerden en uzun alt sorguyu seçer. Uzunluk üst sınıra sahip birden fazla alt sorgu varsa, en uzun eşleşme önce bulunanı seçer.
Örneğin, ilk eşleşme kullanıldığında, alternatifin sol tarafındaki terim bu alt sorguyla eşleştiğinden, hedef dizideki "abcd"
normal ifade b|bc
için yapılan bir arama alt "b"
sorguyla eşleşir; bu nedenle ilk eşleşme, değişikliğin sağ terimini denemez. En uzun eşleşme kullanıldığında, aynı arama değerinden uzun "b"
olduğundan "bc"
eşleşir"bc"
.
Eşleşme, normal ifadenin sonuna ulaşmamış olsa bile başarısız olmadan hedef dizinin sonuna ulaşırsa kısmi eşleşme başarılı olur. Bu nedenle, kısmi eşleşmenin başarılı olmasının ardından hedef dizine karakter eklenmesi sonraki bir kısmi eşleşmenin başarısız olmasına neden olabilir. Ancak kısmi eşleşme başarısız olduktan sonra, karakterlerin hedef sıraya eklenmesi daha sonraki kısmi eşleşmenin başarılı olmasına neden olamaz. Örneğin, kısmi eşleşme ab
ile hedef diziyle "a"
eşleşir, ancak eşleşmez "ac"
.
Biçim bayrakları
ECMAScript Biçim Kuralları | sed Biçim Kuralları | Değiştirme Metni |
---|---|---|
$& |
& |
Normal ifadenin tamamıyla eşleşen karakter dizisi: [match[0].first, match[0].second) |
$$ |
$ |
|
\& |
& |
|
$`" (dolar işareti ve ardından geri tırnak işareti) |
Normal ifadeyle eşleşen alt diziden önce gelen karakter dizisi: [match.prefix().first, match.prefix().second) |
|
$'" (dolar işareti ve ardından ileri tırnak işareti) |
Normal ifadeyle eşleşen alt diziyi izleyen karakter dizisi: [match.suffix().first, match.suffix().second) |
|
$n |
\n |
konumunda n yakalama grubuyla eşleşen karakter dizisi; burada n 0 ile 9 arasında bir sayıdır: [match[n].first, match[n].second) |
\\n |
\n |
|
$nn |
konumunda nn yakalama grubuyla eşleşen karakter dizisi; burada nn 10 ile 99 arasında bir sayıdır: [match[nn].first, match[nn].second) |