Double Commander

2.14. normal ifade sözdizimi

İçerik

1. Tanışın
2. Basit Eşleşme
3. Kaçış dizisi
4. Karakter sınıfları
5. meta karakterler
5.1. Meta Karakter-Satır Ayırıcı
5.2. Meta karakterler-önceden tanımlanmış sınıflar
5.3. Meta Karakter-Sözcük Sınırı
5.4. Meta karakterler-yineleyici
5.5. Meta karakterler-Alternatif
5.6. Meta Karakter-Alt İfade
5.7. Meta Karakter-Referansları Ters Çevirir
6. Preferences (ileriye dönük ve sonrası görüşler)
7. Yakalanmamış Grup
8. Atom takımı.
9. Unicode Kategorileri
10. Değiştiriciler

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.

1. Tanışın

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.

2. Basit Eşleşme

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
İfadeSonuçları
(PHP 3 = 4.0.0)
Dizeyi Eşleştirfoobar
FooBarPtr
Eşleşti.^FooBarPtr

3. Kaçış dizisi

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
İfadeSonuç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
İfadeSonuç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

4. Karakter sınıfları

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ı
İfadeSonuçları
[-az]
Eşleşti.azVe-
[az-]
Eşleşti.azVe-
[a\-z]
Eşleşti.azVe-
[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
İfadelersonucu
Seni aptal!
Dizeler bulmafoobarfooberBekliyorum ama dahil değilfoobbrfoobcr- Bekle.
Seni aptal!
Dizeler bulmafoobbrfoobcrBekliyorum ama dahil değilfoobarfoober- Bekle.

5. meta karakterler

Meta karakterler normal ifadelerin özüdür ve özel karakterlerdir.

Aşağıda açıklandığı gibi farklı metakarakter türleri vardır.

5.1. Meta Karakter-Satır Ayırıcı

Bazı ifadeler satır ayrımını algılamaya yardımcı olur.

Satır Ayıracı
İfadelersonucu
^
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
İfadelersonucu
(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.foobarfoobbrfoob1rDizeyi 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:

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.

5.2. Meta karakterler-önceden tanımlanmış sınıflar

Bazı ifadeler karakter kümelerinin algılanmasına yardımcı olur.

Önceden tanımlanmış sınıflar
İfadelersonucu
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
İfadeSonuçları
(PHP 4 = 4.0.0)
Eşleşti.foob1rfoob6rBir cümle ama dahil değil.foobarfoobbrBekleyin.
(PHP 4 = 4.0)
Eşleşti.foobarfoob rfoobbrBir dizi ama dahil değil.foob=rBekleyin.

5.3. Meta Karakter-Sözcük Sınırı

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ı
İfadelersonucu
\b
Kelime Sınırı
\B
Sözcük olmayan sınırları eşleştirir

5.4. Meta karakterler-yineleyici

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
İfadeSonuç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
İfadelersonucu
"Amcık." R.
Eşleşti.foobarfoobalkjdflkj9rVefoobrDizeyi Bekliyorum
Foob.+ R.
Eşleşti.foobarfoobalkjdflkj9rBir dizi ama dahil değil.foobr
Foob. R.
Eşleşti.foobarfoobbrVefoobrBir cümle ama dahil değil.foobalkj9r
- Evet.
Dizeleri Eşleştirfoobaar
- Evet.
Eşleşti.foobaarfoobaaarfoobaaaarDizeyi 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!bbbbb+?Geri dön.bb*?Boş dizeye geri dön,b{2,3}?Geri dön!bbb{2,3}Geri dön.bbb

Tüm yineleyicileri "açgözlü olmayan" moduna değiştirebilirsiniz (bkzdeğiştirici g).

5.5. Meta karakterler-Alternatif

Kullanabilirsin.|Bir model belirlemek için bir dizialternatifayırmak, bu nedenlefee|fie|foeHedef dizgisinde eşleşirfeefieVeyafoef(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
İfadelersonucu
(PHP 4 = 4.0.0)|- Hayır.
Dizeyi EşleştirfoobarYa dafoofoo

5.6. Meta Karakter-Alt İfade

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
İfadelersonucu
Bu da ne böyle?
Eşleşme 8, 9 veya 10foobarÖrnek için dize
Not:| a+)r
Eşleşti.foob0rfoob1rfoobarfoobaarfoobaarBekleyin.

"Değiştir" şablonları ile ilgili notlar:

Örnek:

Tarihi belirleyelim.21.01.2018Ters yönde.2018.01.21
Arama:(\d{2})\.(\d{2})\.(\d{4})
Bunun yerine:$3.$2.$1

5.7. Meta Karakter-Referansları Ters Çevirir

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
İfadelersonucu
(.)\ 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

6. Preferences (ileriye dönük ve sonrası görüşler)

İ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:

7. Yakalanmamış Grup

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
İfadelersonucu
(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

8. Atom takımı.

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.abccVeabca(?>bc|b)cEşleşti.abccAma uymuyor.abcMotorun geriye doğru gitmesi ve grubu ayarlamaya çalışması yasaklandı.b

9. Unicode Kategorileri

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
KategoriTanı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.

10. değiştiriciler

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.

I
Büyük/küçük harf duyarlı bir desen eşleşmesi gerçekleştirir (sisteminizde yüklü yerel ayarları kullanır). Varsayılan olarak kapalıdır.
M.
Dizeleri birden çok satır olarak düşünün. Yani, olacak^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.
S
Dizeyi tek satır olarak değerlendirir. Yani, olacak.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.
G.
Standart olmayan değiştiriciler. Kapatmak, sonraki tüm operatörleri açgözlü olmayan moduna geçirir (bu değiştirici varsayılan olarak açıktır). Eğer değiştiricilergKapatmak, o zaman+Çalışma şekli için,+?*Çalışma şekli için,*?- Bekle.
X.
Boşluğa ve yorumlara izin vererek desen okunabilirliğini genişletin (aşağıda açıklanmıştır). Varsayılan olarak kapalıdır.
R.
Standart olmayan değiştiriciler. Eğer ayarlanırsa, sınırа-яAyrıca Rusça harfler de dahil.ёА-ЯEkstralarЁа-ЯTüm Rusça harfler dahil. Varsayılan olarak açılır.
#
(?# text): Açıklama,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
İfadeSonuç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.


有效的HTML 4.0过渡 CSS有效!