Aracılığıyla paylaş


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_constantstanı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], ifadesi exprtarafı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 exprtanımlanan kümeye ekler.

    • formunun ch1-ch2karakter aralığı. Kapalı aralıktaki [ch1, ch2] değerlerle temsil edilen karakterleri tarafından exprtanımlanan kümeye ekler.

    • formunun [:name:]karakter sınıfı. Adlandırılmış sınıftaki karakterleri tarafından exprtanımlanan kümeye ekler.

    • formunun [=elt=]denklik sınıfı. tarafından exprtanımlanan kümeye elt eşdeğer harmanlama öğelerini ekler.

    • formunun [.elt.]harmanlama simgesi. harmanlama öğesini elt tarafından exprtanı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 karakterle k eşleşen kimlik kaçışı.

Örnekler:

  • ahedef 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 \ddgeri 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\rveya \vbiçiminde \fsı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 \xhhonaltılık kaçış dizisi. hedef dizisindeki iki onaltılık basamakla temsil edilen bir karakterle eşleşir hh.

  • formunun \uhhhhunicode kaçış dizisi. Hedef dizideki dört onaltılık basamakla temsil edilen bir karakterle eşleşir hhhh.

  • formunun \ckdenetim kaçış dizisi. karakteri tarafından adlandırılan denetim karakteriyle keş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 \Bnegatif 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\Sbiçiminde \ddsw 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\nveya \vbiç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 \ooosekizli kaçış dizisi. Gösterimi bir, iki veya üç sekizli basamakla temsil edilen değer olan hedef dizideki bir karakterle eşleşir ooo.

Yineleme

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 basicECMAScriptfarklı 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 son 0 , normal karakterle 0eş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_classnametanı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ı Tanım
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, DC, EF
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, jk } hkarakter 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', , } kj(h olarak kodlanır ve k olarak 0x920x88 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, 21, 4 } -karakter kümesini temsil eder.

  • [0-2-]{ , , 1, 2- } 0karakter 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. Örnek:

  • 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 0ise, 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 ifade bcd 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 nyakalama 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 nnyakalama grubuyla eşleşen karakter dizisi; burada nn 10 ile 99 arasında bir sayıdır: [match[nn].first, match[nn].second)

Ayrıca bkz.

C++ Standart Kitaplığına Genel Bakış