Double Commander, Andrey Sorokin tarafından yazılmış TRegExpr kütüphanesini kullanır.
Açıklamaların çoğu, kitaplıktaki yardım dosyalarından gelir.
Normal ifadeler, metin arama desenini belirtmek için yaygın olarak kullanılan bir yöntemdir. Özel karakterler (meta karakterler), örneğin, bir satırın başında veya sonunda görünen belirli bir dizenin veya karakter veya karakter grubununn tekrarlarını içeren belirtmemize izin verir.
Double Commander, normal ifadeleri aşağıdaki işlevlerde destekler:
TRegExp kütüphanesi iki çalışma modunu destekler: ANSI ve Unicode. Bir metin dosyasında arama yaparken Double Commander her ikisini de kullanır (dosya kodlamasına bağlı olarak).İsme göre arama yaparken Unicode kullanın.
Herhangi bir tek karakter, aşağıda açıklanan özel anlamlara sahip bir meta karakter olmadığı sürece kendisiyle eşleşir.
Bir dizi karakter, hedef dizedeki karakter serisiyle eşleşir, dolayısıyla desenbluhHedef dizgisinde eşleşirbluh。
Meta karakter veyakaçış sırasının önüne ters eğik çizgi ekleyebiliriz.\ve böylece, metakarakterler gibi yorumlanabilirler.^Dizenin başlangıcı, ancak\^Karakterlerle Eşleştir^,\\Eşleşti.\Bekle.
İşte birkaç örnek:
| Basit Eşleştirme Örneği | |
|---|---|
| İfade | Sonuçları |
(PHP 3 = 4.0.0) |
Dizeyi Eşleştirfoobar |
FooBarPtr |
Eşleşti.^FooBarPtr |
C ve Perl 'de kullanılan kaçış sırası sözdizimini kullanarak karakterleri belirtebilirsiniz:\nYeni satır karakteriyle eşleşir,\tSekmeyle eşleşir, vb.
Daha genel olarak;\xnnBunlardan,nnASCII değerleri ile eşleşen onaltılık sayı dizisidir.nnKarakter.
Geniş (Unicode) karakter koduna ihtiyacınız varsa kullanabilirsiniz.\x{nnnn}Bunlardan;nnnn –Bir veya daha fazla onaltılık sayı.
| Kaçış dizisi | |
|---|---|
| İfade | Sonuçları |
\xnn |
ASCII kodlarınnkarakterleri |
\x{nnn} |
ASCII KodlarınnnnKarakter (normal metin için bir bayt, Unicode iki bayt) |
\t. |
Sekme (HT/Tab), ve\x09- Aynı. |
\n |
Yeni satır karakteri (NL/LF) ve\x0a- Aynı. |
\rr |
Satır başı (CR) ve\x0d- Aynı. |
\f |
form besleme işareti (FF) ve\x0c- Aynı. |
\a |
Alarm (zil sesi)(BEL), v\x07- Aynı. |
\d |
ESC (Çıkış) ve\x1b- Aynı. |
İşte bazı örnekler:
| kaçış dizisi örneği | |
|---|---|
| İfade | Sonuçları |
(PHP 4 = 4.0.0) |
Eşleşti.foo bar(Ortadaki boşluklara dikkat) |
\tfoobar |
Sekme tarafından önceden tanımlanmış olan eşlemfoobar |
Karakter listesini kullanarak yapabilirsiniz.[]'ta, listedeki herhangibir karakterle eşleşecek karakter sınıfını belirtin.
Eğer...[Sonraki yazı:^Bu sınıf, listedebulunmayan herhangi bir karakterle eşleşir.
Listeye göre,-Karakteraralığıbelirtmek için kullanılır, dolayısıylaa-zBaşlangıcı gösterira- Evet.zTüm karakterler, dahil.
Eğer isterseniz.-Sınıfın bir üyesi olmak için, bunu listenin başına veya sonuna yerleştirin veya ters eğik çizgi kullanarak kaçış yapın.
kullanmak istiyorsanız]Bunu listenin başına koyabilir veya ters eğik çizgi kullanarak kaçabilirsiniz.
| Karakter sınıfları | |
|---|---|
| İfade | Sonuçları |
[-az] |
Eşleşti.a、zVe- |
[az-] |
Eşleşti.a、zVe- |
[a\-z] |
Eşleşti.a、zVe- |
[a-z] |
Eşleşme Başlangıcıa- Burada.ztüm 26 küçük harf |
[\n-\x0D] |
Herhangi bir şeyle eşleşiyor\x10、\x11、\x12、\x13 |
[\d-t] |
Herhangi bir sayı,-Veyat |
[-a] |
Eşleşme Başlangıcı]- Burada.aherhangi bir karakter. |
İşte bazı örnekler:
| Karakter sınıfı örneği | |
|---|---|
| İfadeler | sonucu |
Seni aptal! |
Dizeler bulmafoobar、fooberBekliyorum ama dahil değilfoobbr、foobcr- Bekle. |
Seni aptal! |
Dizeler bulmafoobbr、foobcrBekliyorum ama dahil değilfoobar、foober- Bekle. |
Meta karakterler normal ifadelerin özüdür ve özel karakterlerdir.
Aşağıda açıklandığı gibi farklı metakarakter türleri vardır.
Bazı ifadeler satır ayrımını algılamaya yardımcı olur.
| Satır Ayıracı | |
|---|---|
| İfadeler | sonucu |
^ |
Satır başlangıcı |
$ |
Satır Sonu |
\A |
Metin başlangıcı |
Bas gaza! |
Metin Sonu |
. |
Satırdaki herhangi bir karakter |
İşte birkaç örnek:
| Satır ayırıcı örneği | |
|---|---|
| İfadeler | sonucu |
(PHP 4 = 4.0.0) |
Sadece dize olarakfoobarSatır başında eşleşir |
(PHP 4 = 4.0.0) |
Sadece dize olarakfoobarSatırın sonunda eşleşti. |
$foobar |
Sadece dize olarakfoobarSatırdaki tek dize eşleşir. |
Dikkatli olun. |
Eşleşti.foobar、foobbr、foob1rDizeyi Bekliyorum |
Varsayılan olarak.^Meta karakterler yalnızca giriş dizesinin/metnin başında eşleşmeyi garanti eder.$Meta karakterler yalnızca sonunda eşleşir. Gömülü satır ayırıcıları^Veya$Eşleşin.
Bununla birlikte, dizeleri çok satırlı bir tampon olarak düşünmek isteyebilirsiniz, bu şekilde^Dizedeki herhangi bir satır ayırıcısından sonra eşleşir.$Herhangi bir satır ayırıcısından önce eşleşir. BunuM değiştiricisiniaçarak yapabilirsiniz.
\AVe\ZSanki...^Ve$Aynı, ancakm değiştiricileri kullanıldığında, birçok kez eşleşmezler.^Ve$Her iç satır ayırıcı ile eşleşir.
Varsayılan olarak..Meta karakter herhangi bir karakterle eşleşir, ancaks değiştiricisikapatılırsa,.Gömülü satır ayırıcısıyla eşleşmez.
TRegExpr satır ayırıcılarını Unicode teknik standartlarına (Teknik Standart #18) göre işler:
^Giriş dizesinin başında vem değiştiricisi açılırsa,\x0D\x0AVeya\x0AYa da\x0DHerhangi bir göründükten sonra (Unicode desteği:\x2028Veya\x2029Ya da\x0BVeya\x0CYa da\x85)。Lütfen dikkat, burada\x0D\x0AListede boş satır yok.
$Giriş satırının sonunda vem değiştiricisi açılırsa,\x0D\x0AYa da\x0AVeya\x0DHerhangi bir görünmeden önce (Unicode desteği:\x2028Veya\x2029Ya da\x0BYa da\x0CYa da\x85)。Lütfen dikkat, burada\x0D\x0AListede boş satır yok.
.Herhangi bir karakterle eşleşir, ancaks değiştiricisikapatılırsa,.Eşleşme yok.\x0D\x0AVe\x0AVe\x0D(Unicode desteği:\x2028Ve\x2029Ve\x0BVe\x0CVe\x85)。
Lütfen dikkat.^.*$(Boş satır modu) Yok.\x0D\x0ABu dizide boş bir yazı var ama burada\x0A\x0DSıradaki boş dizelerle eşleşir.
Bazı ifadeler karakter kümelerinin algılanmasına yardımcı olur.
| Önceden tanımlanmış sınıflar | |
|---|---|
| İfadeler | sonucu |
Not: |
Alfasayısal karakterler (dahil)_(Yani)[0-9A-Za-z_] |
\W |
Alfabetik olmayan sayısal karakterler |
\d |
Sayısal karakterler |
\D |
Sayısal Olmayan Karakterler |
Not: |
Herhangi bir boşluk karakteri (v[ \t\n\r\f]Aynı) |
\S |
Boşluk Olmayan Karakter |
Özelkarakter sınıflarında kullanabilirsiniz.\w、\dVe\s。
İşte birkaç örnek:
| Önceden tanımlanmış sınıf örneği | |
|---|---|
| İfade | Sonuçları |
(PHP 4 = 4.0.0) |
Eşleşti.foob1r、foob6rBir cümle ama dahil değil.foobar、foobbrBekleyin. |
(PHP 4 = 4.0) |
Eşleşti.foobar、foob r、foobbrBir dizi ama dahil değil.foob=rBekleyin. |
Sınır (\bBir tarafta vardır.\wDiğer tarafta var.\Wİki karakter arasındaki konum (herhangi bir sırada), dizenin başında ve sonundaki varsayımsal karakterleri eşleştirme olarak sayar\W。
| Kelime sınırı | |
|---|---|
| İfadeler | sonucu |
\b |
Kelime Sınırı |
\B |
Sözcük olmayan sınırları eşleştirir |
Normal ifadedeki herhangi bir öğe, başka bir meta karakter yineleyicisini takip edebilir.
Bu meta karakterleri kullanarak, önceki karakterin, meta karakterin veya alt ifadenin kaç kez görüntüleneceğini belirtebilirsiniz.
| yineleyici | |
|---|---|
| İfade | Sonuçları |
* |
Sıfır veya daha fazla ("açgözlülük"), benzer{0,} |
+ |
Bir veya daha fazla ("açgözlülük"), benzer{1,} |
? |
Sıfır ya da bir ("açgözlülük"), benzer{0,1} |
- Ne? |
Tam da öyle.n"Açgözlülük." |
{n,} |
En azından.n"Açgözlülük." |
- Evet. |
En azından.nİkinci ama fazla değil.m"Açgözlülük." |
*? |
Sıfır veya daha fazla ("açgözlü olmayan"), benzer{0,}? |
+? |
Bir veya daha fazla ("açgözlü olmayan"), benzer{1,}? |
?? |
Sıfır ya da bir kez ("açgözlü olmayan"), benzer{0,1}? |
- Ne? |
Tam da öyle.n"Açgözlülük değil" |
- Ne? |
En azından.n"Açgözlülük değil" |
- Evet? |
En azından.nİkinci ama fazla değil.m"Açgözlülük değil" |
Bu nedenle, form için{n,m}Parantez içindeki sayı eşleşen öğelerinminimum sayısınıbelirtirnVemaksimum sayı.m。
Biçim.{n}Denklik{n,n}Tam olarak eşleşti.nBir kez.
Biçim.{n,}Eşleşti.nBir veya daha fazla kez.
nYa damBoyutun sınırı yoktur, ancak büyük sayılar yürütme hızını yavaşlatır ve daha fazla bellek tüketir.
Parantez başka bir bağlamda görünüyorsa, normal bir karakter olarak kabul edilir.
İşte birkaç örnek:
| yineleyici örneği | |
|---|---|
| İfadeler | sonucu |
"Amcık." R. |
Eşleşti.foobar、foobalkjdflkj9rVefoobrDizeyi Bekliyorum |
Foob.+ R. |
Eşleşti.foobar、foobalkjdflkj9rBir dizi ama dahil değil.foobr |
Foob. R. |
Eşleşti.foobar、foobbrVefoobrBir cümle ama dahil değil.foobalkj9r |
- Evet. |
Dizeleri Eşleştirfoobaar |
- Evet. |
Eşleşti.foobaar、foobaaar、foobaaaarDizeyi Bekliyorum |
- Evet. |
Eşleşti.foobaarVeyafoobaaarBir cümle ama dahil değil.foobaaaar |
"Açgözlülük" ile ilgili bir açıklama.
"Açgözlülük" mümkün olduğunca az alır,"açgözlü olmayan" ise daha az alır.
Mesela..b+Veb*Dizelere uygulamaabbbbcGeri dön!bbbb,b+?Geri dön.b,b*?Boş dizeye geri dön,b{2,3}?Geri dön!bb,b{2,3}Geri dön.bbb。
Tüm yineleyicileri "açgözlü olmayan" moduna değiştirebilirsiniz (bkzdeğiştirici g).
Kullanabilirsin.|Bir model belirlemek için bir dizialternatifayırmak, bu nedenlefee|fie|foeHedef dizgisinde eşleşirfee、fieVeyafoe(f(e|i|o)eAynı şekilde.)
İlk alternatif, önceki desen ayırıcısını içerir ((、[(veya modelin başlangıcı) ilk|Tüm içerik, son alternatif sonuncudan içerir|Bir sonraki desen ayırıcısına kadar her şey.
Bu nedenle, genellikle alternatifler parantez içine dahil etmek, başlangıç ve bitiş konumlarıyla ilgili karışıklığı en aza indirmek için kullanılır.
Alternatif soldan sağa denenir, böylece tüm ifadeyi eşleştirmek için bulunan ilk alternatif seçilir.
Bu, alternatiflerin mutlaka açgözlü olmadığı anlamına gelir.
Örneğin: kullanımfoo|footEşleşti.barefootZaman, yalnızcafooBölüm eşleşir, çünkü bu ilk denemenin alternatifi ve hedef dizeyi başarıyla eşleştirmiştir. (Eşleşen metni yakalamak için parantezler kullandığımızda bu önemli olmayabilir.)
Unutma,|kare parantez içinde tam anlamıyla yorumlanır, bu nedenle yazarsanız[fee|fie|foe]Aslında sadece eşleşir.[feio|]。
Örnek:
| Alternatif örnekleri | |
|---|---|
| İfadeler | sonucu |
(PHP 4 = 4.0.0)|- Hayır. |
Dizeyi EşleştirfoobarYa dafoofoo |
Parantez Yapısı( ... )Normal ifadelerin alt ifadeleri tanımlamak için de kullanılabilir.
Aramadan sonra, herhangi bir alt ifadeyi çağırabilir ve alt ifadeleri maske olarak kullanabilirsiniz.
Alt ifadeler, açma parantezlerinin soldan sağa doğru sıralamasına göre numaralandırılır.
İlk alt ifade 1 numaralıdır ve 90 adede kadar alt ifadeyi destekler (tüm normal ifade eşleşme numarası 0 ile değiştirebilirsiniz)$0Ya da$&)。
İşte birkaç örnek:
| Alt İfadeler | |
|---|---|
| İfadeler | sonucu |
Bu da ne böyle? |
Eşleşme 8, 9 veya 10foobarÖrnek için dize |
Not:| a+)r |
Eşleşti.foob0r、foob1r、foobar、foobaar、foobaarBekleyin. |
"Değiştir" şablonları ile ilgili notlar:
$Veya\Lütfen öneki kullanın.\。1\$ is $2\\rub\\Geri dönecek.1$ is <subexpr2>\rub\。$nOrijinal sayı daha sonra yerleştirilir, parantezli olmalıdır{}Efendim.nİçeri gir. a$12bcGeri dönecek.a<subexpr12>bcAma...a${1}2bcGeri dönecek.a<subexpr1>2bc。Örnek:
Tarihi belirleyelim.21.01.2018Ters yönde.2018.01.21:
Arama:(\d{2})\.(\d{2})\.(\d{4})
Bunun yerine:$3.$2.$1
meta karakterler\1- Burada.\9Ters referans olarak yorumlanmıştır.\nÖnceki Eşleşen Alt İfadeyi Eşleştirn。
İşte birkaç örnek:
| Ters referans örneği | |
|---|---|
| İfadeler | sonucu |
(.)\ 1+ 1 |
Eşleşti.aaaaVecc |
(.+)\ 1+ |
Bu da uyuyor.ababVe123123 |
(['"]?) (\d+)\1 |
Eşleşti."13"(çift tırnak içinde),'4'(tek tırnak içinde) veya77(Tırnak olmadan) Bekleyin |
İleriye dönük iddia:foo(?=bar)Sadece...barÖnceden eşleşti.fooVe...barEşleşme içinde değildir.
İleriye dönük iddia:foo(?!bar)Sadece arka tarafta.barZaman eşleşir.foo。
Geriye bakarak şöyle diyor:(?<=foo)barSadece...fooSonra eşleşme.barVe...fooEşleşme içinde değildir.
Geriye dönük görüş:(?<!foo)barSadece ön tarafta. Hayır.fooÖn ekte eşleşirbar。
Sınırlamalar:
İleriye bakan parantezler ifadenin sonunda olmalı ve sonraki bakan parantezler ifadenin başında olmalıdır. Bu nedenle seçim için desteklenmiyor.|arasında veya grup içinde iddia.
Arkadan bakmak için(?<!foo)bar, normal ifadelerfooSabit uzunluk olmalı, yani sadece sabit uzunluk eşleşen işlemler içermelidir. Tekrarlanan sayılar dışında, kelime kullanımı yasaktır.{n}Veya{n,n}Parantez. Burada karakter sınıflarına izin verilir, nokta kullanımına izin verilir, izin verilir\bVe\B。Gruplara ve seçimlere izin verilmez.
Diğer 3 iddia türü için parantez içindeki ifade herhangi bir karmaşıklık olabilir.
Sözdizimi:(?:expr)。
Bu grubun "indeks" yoktur ve ters referanslarda görünmez. Alt ifadeleri gruplamak istediğimizde, ancak dizenin eşleşme/yakalama bölümü olarak kaydetmek istemediğimizde yakalama olmayan gruplar kullanılır. Yakalama yapmayan gruplar normal ifadelerin çalışmasını hızlandırır.
| Yakalanmamış Grup | |
|---|---|
| İfadeler | sonucu |
(https?| ftp)://([^/\r\n]+) |
- Evet.https://doublecmd.sourceforge.ioEşleşme.httpsVedoublecmd.sourceforge.io |
(?: https?| ftp)://([^/\r\n]+) |
- Evet.https://doublecmd.sourceforge.ioiçinde sadece eşleşirdoublecmd.sourceforge.io |
Sözdizimi:(?>expr|expr|...)。
Atomik gruplar, yakalama yapmayan gruplar için özel bir durumdur: desenin bir parçası zaten bulunmuşsa, bu grup parantez grubunun geriye dönük izlemesini devre dışı bırakır. Atomik gruplar daha hızlı çalışır ve birçok farklı ifadeye sahip grupları optimize etmek için kullanışlıdır.
Mesela..a(bc|b)cEşleşti.abccVeabc,a(?>bc|b)cEşleşti.abccAma uymuyor.abcMotorun geriye doğru gitmesi ve grubu ayarlamaya çalışması yasaklandı.b。
Unicode standardı, karakter kategorilerinin adını alır. Bunlar 2 harfli dizelerdir. Mesela?LuBüyük harf.LlKüçük harflerle. 1 harfinin büyük bir kategorisiLTüm harfler.
| Unicode Kategorileri | |
|---|---|
| Kategori | Tanımı |
L | harfleri. |
Lu | Büyük Yazım |
Ll | Küçük Harfler |
Lt | başlık harf harf |
Lm | Değiştirici Harfler |
Diğer | Mektuplar |
M | işareti |
Mn | Non-boşluk işareti |
Mc | mojikumi işaretleri |
İşaretleri | Kapattım |
N | sayısı |
Nd | Sayıları |
Nl | Alfabesi |
Başka | sayılar yok |
P | Noktalama İşaretleri |
Pc | Bağlantı Noktaları |
Pd | kısa noktalama |
Ps | Açılış Noktası |
Pe | kapalı |
Pi | Başlangıç Noktalama |
Pf | Son Noktalama |
Po | Diğer Noktalar |
S | sembolü |
Sm | Matematik Sembolleri |
Sc | Para Sembolü |
Sk | Değiştirici Sembolü |
Yani | diğer semboller |
Z | Ayırıcı |
Zs | Boşluk Ayırıcı |
Zl | Satır Ayırıcı |
Zp | Paragraf Ayırıcı |
C | Diğerleri |
Cc | Kontrolü |
Cf | Formatı |
Cs | Ajanı |
Co | özel kullanım |
CC | dağıtılmamış |
meta karakterler\pBelirtilen kategoriyi temsil eden bir Unicode karakteri. Sözdizimi:\pLVe\p{L}1 harfli isim için,\p{Lu}2 harfli isimler için kullanılır.
meta karakterler\PTersine çevrilir ve belirtilen kategoride olmayan bir Unicode karakteri temsil eder.
Bu meta karakterler karakter sınıflarında da desteklenir.
Tek değiştiricinin sözdizimi:(?i)Açmak anlamına gelir.(?-i)Kapalı anlamına gelir. Birden çok değiştiriciye izin ver, örneğin:(?msgxr-imsgxr)。
Düzenli ifadelerin davranışını değiştirmek için değiştiriciler kullanılır. değiştiriciler sadece etkiler(?imsgxr-imsgxr)Operatörden sonra düzenli ifade bölümü
Bu değiştiricilerden herhangi biri normal ifadenin içine gömülebilir. Değiştirici satır içi bir alt ifadeye girerse, yalnızca alt ifadeyi etkiler.
^Ve$Eşleşen dizenin yalnızca başından veya sonundan eşleşen dizenin içindeki herhangi bir satırın başına veya sonuna değiştirme; ayrıca bkz.satır ayırıcı. Varsayılan olarak kapalıdır. .Herhangi bir karakterle, hatta satır ayırıcıyla (ayrıca bkz.satır ayırıcısı) eşleşecek şekilde değiştirin ve genellikle eşleşmez. Varsayılan olarak açılır. gKapatmak, o zaman+Çalışma şekli için,+?,*Çalışma şekli için,*?- Bekle. а-яAyrıca Rusça harfler de dahil.ё,А-ЯEkstralarЁ,а-ЯTüm Rusça harfler dahil. Varsayılan olarak açılır. textGöz ardı edildi. Lütfen dikkat, TRegExpr görüyor.)Not kapatılır, bu nedenle yorumlara tam anlamıyla sığamaz.)。İşte bazı örnekler:
| Perl Genişletme Örneği | |
|---|---|
| İfade | Sonuçları |
(?·Saint-Petersburg |
Eşleşti.Saint-petersburgVeSaint-Petersburg |
(? Saint... (i)Petersburg |
Eşleşti.Saint-PetersburgAma uymuyor.Saint-petersburg |
(? Saint--? Petersburg. |
Eşleşti.Saint-petersburgVesaint-petersburg |
((? Saint-) mı? Petersburg. |
Eşleşti.saint-PetersburgAma uymuyor.saint-petersburg |
DeğiştiricilerxKendisinin daha fazla açıklamaya ihtiyacı vardır.
Ters eğik çizgi olmadan ve karakter sınıfında olmayan boşlukların yoksaymasını söyler.
Normal ifadeleri (biraz) daha okunabilir parçalara ayırmak için kullanabilirsiniz.
#Karakterler ayrıca yorumları tanıtan meta karakterler olarak da kabul edilir, örneğin:
(
(abc) # 注释1
| # 您可以使用空格来格式化正则表达式 - TRegExpr会忽略它
(efg) # 注释2
)
Bu aynı zamanda, modda gerçek boşluk kullanmak istiyorsanız veya#Karakterler (karakter sınıfları dışında, bunlarxEtki), onlardan kaçmanız veya kodlama için sekizlik veya onaltılık kaçış kullanmanız gerekir.
Genel olarak, bu özellikler normal ifade metninin okunabilirliğini büyük ölçüde artırır.