spot_img
Friday, April 19, 2024
spot_img
HomeTechBilgi TeknolojisiRegex'i Gerçekten Nasıl Kullanıyorsunuz? PowerShell ile Açık Dosya İşleyicilerini Yönetme PowerShell ile Uzak Windows...

Regex'i Gerçekten Nasıl Kullanıyorsunuz? PowerShell ile Açık Dosya İşleyicilerini Yönetme PowerShell ile Uzak Windows Sistemlerinde Yüklü Yazılımları Bulma Kişisel Gitlab Sunucusu Nasıl Kurulur Terraform ile AWS EC2 Örnekleri Nasıl Oluşturulur AWS’nin Makine Öğrenim Hizmetleri için Başlangıç ​​Kılavuzu PowerShell ile SQL Server Hizmet Paketlerini Ücretsiz Dağıtma

-

Normal ifade için kısa olan normal ifade, programlama dillerinde dizelerde kalıpları eşleştirmek, bul ve değiştir, giriş doğrulama ve metni yeniden biçimlendirmek için kullanılır. Regex'in doğru şekilde nasıl kullanılacağını öğrenmek metinle çalışmayı çok daha kolay hale getirebilir.

Regex Sözdizimi, Açıklandı

Regex, korkunç sözdizimine sahip olmakla ünlüdür, ancak yazmak, okumaktan çok daha kolaydır. Örneğin, RFC 5322 uyumlu bir e-posta doğrulayıcı için genel bir normal ifade aşağıdadır:

(?:(a-z0-9!#$%&'*+/=?^_`{|}~-)+(?:.(a-z0-9!#$%&'*+/=?^_`{|}~-)+)*|"(?:(x01-
x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f)|\(x01-x09x0bx0cx0e-x7f))*")
@(?:(?:(a-z0-9)(?:(a-z0-9-)*(a-z0-9))?.)+(a-z0-9)(?:(a-z0-9-)*(a-z0-9))?|((?
:(?:25(0-5)|2(0-4)(0-9)|(01)?(0-9)(0-9)?).){3}(?:25(0-5)|2(0-4)(0-9)|(01)?(0-
9)(0-9)?|(a-z0-9-)*(a-z0-9):(?:(x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f)|
\(x01-x09x0bx0cx0e-x7f))+)))

Birisi yüzünü klavyeye vurmuş gibi görünüyorsa, yalnız değilsin. Ama kaputun altında, tüm bu karışıklık aslında sonlu durumlu bir makineyi programlıyor. Bu makine, her karakter için çalışır, belirlediğiniz kurallara göre eşleşir ve eşleşir. Çok sayıda çevrimiçi araç, Regex makinenizin nasıl çalıştığını gösteren demiryolu diyagramları oluşturacaktır. İşte aynı Regex görsel olarak:

Hala çok kafa karıştırıcı, ama çok daha anlaşılır. Hareketli parçalara sahip ve hepsinin nasıl birbirine uyduğunu tanımlayan kurallara sahip bir makinedir. Birinin bunu nasıl bir araya getirdiğini görebilirsiniz; sadece büyük bir metin küresi değil.

İlk Kapalı: Regex Hata Ayıklayıcısını Kullanma

Başlamadan önce, Regex'iniz özellikle kısa değilse veya özellikle yetkin değilseniz, yazarken ve test ederken çevrimiçi bir hata ayıklayıcı kullanmalısınız. Sözdizimini anlamayı çok daha kolay hale getirir. Test ve yerleşik sözdizimi referansı sunan Regex101 ve RegExr'i öneriyoruz.

Regex Nasıl Çalışır?

Şimdilik çok daha basit bir şeye odaklanalım. Bu, Regulex'ten çok kısa (ve kesinlikle RFC 5322 uyumlu olmayan) bir e-posta uyumlu Regex için bir diyagramdır:

Regex motoru soldan başlar ve satırları aşağı doğru hareket ettirerek karakterleri eşleşir. Grup 1, satır sonu dışında herhangi bir karakterle eşleşir ve sonraki blok bir eşleşme bulana kadar karakterlerle eşleşmeye devam eder. Bu durumda, bir @ Grup # 1, e-posta adresinin adını ve sonraki her şeyi alan adıyla eşleştiğini gösterir.

E-posta örneğimizde Grup # 1'i tanımlayan Normal İfade:

(.+)

Parantezler, Regex motoruna bu grubun eşleşmesinin içeriğini özel bir değişkene eklemesini söyleyen bir yakalama grubu tanımlar. Bir dizede Regex çalıştırdığınızda, varsayılan dönüş tüm eşleşmedir (bu durumda, tüm e-posta). Ancak her yakalama grubunu da döndürür, bu da bu Regex'i e-postalardan ad çekmek için yararlı kılar.

Nokta, “Yeni Satır Hariç Herhangi Bir Karakter” in sembolüdür. Bu, bir satırdaki her şeyle eşleşir, bu nedenle bu e-postayı Regex'e geçtiyseniz:

%$#^&%*#%$#^@gmail.com

Eşleşir %$#^&%*#%$#^ gülünç olmasına rağmen, isim olarak.

Artı (+) sembolü, “önceki karakteri veya grubu bir veya daha fazla kez eşleştirin” anlamına gelen bir kontrol yapısıdır. Sadece ilk karakterin değil, tüm ismin eşleşmesini sağlar. Demiryolu şemasında bulunan döngüyü oluşturan şey budur.

Regex'in geri kalanının deşifre edilmesi oldukça basittir:

(.+)@(.+..+)

İlk grup, @ sembolü. Daha sonra, bir nokta karakterine ulaşana kadar birden çok karakterle eşleşen bir sonraki grup başlar.

Noktalar, parantezler ve eğik çizgiler gibi karakterler Regrex'teki sözdiziminin bir parçası olarak kullanıldığından, bu karakterlerle eşleşmek istediğinizde, ters eğik çizgiyle düzgün bir şekilde kaçmanız gerekir. Bu örnekte, yazdığımız dönemi eşleştirmek için . ayrıştırıcı bunu “bir nokta ile eşleş” anlamına gelen bir sembol olarak kabul eder.

Karakter Eşleme

Regex'inizde kontrol dışı karakterler varsa, Regex motoru bu karakterlerin eşleşen bir blok oluşturacağını varsayar. Örneğin, Normal İfade:

he+llo

“Merhaba” kelimesini istediğiniz sayıda e ile eşleştirecek. Düzgün çalışması için diğer tüm karakterlerin kaçması gerekir.

Regex ayrıca bir dizi karakter için kısayol görevi gören karakter sınıflarına sahiptir. Bunlar Regex uygulamasına bağlı olarak değişebilir, ancak bu standartların bazıları standarttır:

  • . – satırsonu dışında herhangi bir şeyle eşleşir.
  • w – rakamlar ve alt çizgiler dahil herhangi bir “kelime” karakteriyle eşleşir.
  • d – sayılarla eşleşir.
  • b – boşluk karakterleriyle eşleşir (yani boşluk, sekme, yeni satır).

Bu üçünün hepsinde işlevlerini tersine çeviren büyük harfli meslektaşları vardır. Örneğin, D sayı olmayan herhangi bir şeyle eşleşir.

Regex ayrıca karakter kümesi eşleşmesine sahiptir. Örneğin:

(abc)

İkisi de eşleşecek a, bveya c. Bu bir blok görevi görür ve köşeli parantezler sadece kontrol yapılarıdır. Alternatif olarak, bir dizi karakter belirtebilirsiniz:

(a-c)

Veya kümede yer almayan herhangi bir karakterle eşleşecek grubu reddetme:

(^a-c)

Niceleyiciler

Nicelleştiriciler Regex'in önemli bir parçasıdır. Bilmediğiniz dizeleri eşleştirmenize izin veriyorlar kesin ancak oldukça iyi bir fikriniz var.

+ e-posta örneğindeki işleç bir nicelik belirteci, özellikle “bir veya daha fazla” nicelik belirtecidir. Belirli bir dizenin ne kadar uzun olduğunu bilmiyorsak, ancak alfasayısal karakterlerden oluştuğunu (ve boş olmadığını) biliyoruz:

w+

Ek olarak +, ayrıca:

  • * “sıfır veya daha fazla” ile eşleşen operatör. Aslında aynı +ancak bir eşleşme bulamama seçeneği vardır.
  • ? “sıfır veya bir” ile eşleşen operatör. Bir karakteri isteğe bağlı yapma etkisi vardır; ya oradadır ya da yoktur ve bir kereden fazla eşleşmez.
  • Sayısal nicelik belirleyiciler. Bunlar gibi tek bir sayı olabilir {3}“tam olarak 3 kez” veya benzer bir aralık anlamına gelir {3-6}. Sınırsız yapmak için ikinci sayıyı dışarıda bırakabilirsiniz. Örneğin, {3,} “3 veya daha fazla kez” anlamına gelir. Garip bir şekilde, ilk sayıyı dışarıda bırakamazsınız, bu nedenle “3 veya daha az kez” istiyorsanız,

Açgözlü ve Tembel Niceleyiciler

Kaputun altında, * ve + operatörler açgözlü. Mümkün olduğunca eşleşir ve bir sonraki bloğa başlamak için gerekenleri geri verir. Bu büyük bir sorun olabilir.

İşte bir örnek: HTML'yi veya kapanış ayraçlarıyla başka bir şeyi eşleştirmeye çalıştığınızı varsayalım. Giriş metniniz:

Hello World

Ve parantez içindeki her şeyi eşleştirmek istiyorsunuz. Şöyle bir şey yazabilirsiniz:

<.*>

Bu doğru fikir, ancak önemli bir nedenden dolayı başarısız: Regex motoru “div>Hello World

.*ve ardından sonraki blok, bu durumda bir kapanış köşeli ayraç (>). Sadece eşleşmesi için geri gitmesini beklersiniz “div“Ve kapanış div ile eşleştirmek için tekrarlayın. Ancak backtracker, dizenin sonundan çalışır ve parantez içindeki her şeyi eşleştiren bitiş parantezinde durur.

Çözüm, niceleyicimizi tembel yapmaktır, bu da mümkün olduğunca az karakterle eşleşeceği anlamına gelir. Kaputun altında, bu sadece bir karakterle eşleşecek ve daha sonra bir sonraki blok eşleşmesine kadar alanı doldurmak için genişleyecek, bu da büyük Regex işlemlerinde daha fazla performans göstermesini sağlayacak.

Bir niceleyicinin tembel yapılması, nicelleştiriciden hemen sonra bir soru işareti eklenerek yapılır. Bu biraz kafa karıştırıcı çünkü ? zaten bir niceleyicidir (ve varsayılan olarak açgözlüdür). HTML örneğimiz için, Regex bu basit ekleme ile düzeltildi:

<.*?>

Tembel operatör, aşağıdakiler de dahil olmak üzere herhangi bir nicelleştiriciye bağlanabilir +?, {0,3}?, ve hatta ??. Sonuncusunun bir etkisi olmamasına rağmen; çünkü zaten sıfır veya bir karakterle eşleşiyorsunuz, genişletilecek yer yok.

Gruplama ve Çevre

Regex'teki grupların birçok amacı vardır. Temel düzeyde, birden fazla jetonu bir blokta birleştirirler. Örneğin, bir grup oluşturabilir ve ardından tüm grup için bir nicelik belirteci kullanabilirsiniz:

ba(na)+

Bu, tekrarlanan “na” ifadesini eşleştirmek için gruplar banana, ve banananana, ve bunun gibi. Grup olmasaydı, Regex motoru bitiş karakterini tekrar tekrar eşleştirecekti.

İki basit parantez içeren bu tür gruba yakalama grubu denir ve çıktıya dahil eder:

Bundan kaçınmak ve sadece yürütme nedenleriyle simgeleri birlikte gruplamak istiyorsanız, yakalamayan bir grup kullanabilirsiniz:

ba(?:na)

Soru işareti (ayrılmış bir karakter) standart olmayan bir grubu tanımlar ve aşağıdaki karakter ne tür bir grup olduğunu tanımlar. Soru işaretli gruplara başlamak idealdir, çünkü aksi takdirde bir gruptaki noktalı virgüllerle eşleşmek istiyorsanız, bunlardan kaçmak için iyi bir neden olmadan kaçmanız gerekir. Ama sen her zaman Regex soru işaretleri kaçmak zorunda.

Çıktı ile çalışırken kolaylık sağlamak için gruplarınızı da adlandırabilirsiniz:

(?'group')

Bunlara, değişkenlere benzer şekilde çalışmalarını sağlayan Regex'inizde başvurabilirsiniz. Belirtilmemiş gruplara jetonla başvurabilirsiniz 1, ancak bu yalnızca 7'ye kadar çıkar, bundan sonra grupları adlandırmaya başlamanız gerekir. Adlandırılmış gruplara başvurmak için sözdizimi şöyledir:

k{group}

Bu, dinamik olabilen adlandırılmış grubun sonuçlarını gösterir. Esasen, grubun birden çok kez meydana gelip gelmediğini kontrol eder, ancak pozisyonu önemsemez. Örneğin, bu üç özdeş kelime arasındaki tüm metni eşleştirmek için kullanılabilir:

Grup sınıfı, yön işaretleri de dahil olmak üzere Regex'in kontrol yapısının çoğunu bulacağınız yerdir. Lookaheads, bir ifadenin eşleşmesi gerektiğini, ancak sonucu içermediğinden emin olur. Bir şekilde, bir if ifadesine benzer ve false döndürürse eşleşemez.

Olumlu bir ileriye yönelik sözdizimi (?=). İşte bir örnek:

Bu, bir e-posta adresinin ad kısmını, bölmede yürütmeyi durdurarak çok temiz bir şekilde eşleştirir @. Lookahead'ler herhangi bir karakter tüketmez, bu yüzden bir lookahead başarılı olduktan sonra yayınlanmaya devam etmek istiyorsanız, yine de lookahead'de kullanılan karakterle eşleşebilirsiniz.

Pozitif ileriye dönüklere ek olarak, ayrıca:

  • (?!) – İfadeyi sağlayan negatif ileri bakışlar değil eşleşme.
  • (?<=) - Bazı teknik kısıtlamalar nedeniyle her yerde desteklenmeyen olumlu görünümler. Bunlar, eşleştirmek istediğiniz ifadenin önüne yerleştirilir ve sabit bir genişliğe sahip olmalıdırlar (yani, nicelleştiriciler hariç) {number}. Bu örnekte, (?<=@)w+.w+ e-postanın alan adı kısmıyla eşleşmesini sağlar.
  • (? - Olumlu bakış açılarıyla aynı olan, ancak yok edilen negatif bakış açıları.

Regex Motorları Arasındaki Farklar

Tüm Regex eşit yaratılmaz. Çoğu Regex motoru belirli bir standarda uymaz ve bazıları dillerine uyacak şekilde biraz değişir. Bir dilde çalışan bazı özellikler başka bir dilde çalışmayabilir.

Örneğin, sed macOS ve FreeBSD için derlenenler t sekme karakterini temsil etmek için. Komut satırında bir sekme kullanmak için bir sekme karakterini manuel olarak kopyalayıp terminale yapıştırmanız gerekir sed.

Bu öğreticinin çoğu, PHP için kullanılan varsayılan Regex motoru olan PCRE ile uyumludur. Ancak JavaScript’in Regex motoru farklıdır; tırnak işareti içeren (parantez ister) adlı yakalama gruplarını desteklemez ve diğer şeylerin yanı sıra özyineleme yapamaz. PCRE bile farklı sürümlerle tamamen uyumlu değildir ve Perl normal ifadesinden çok farklıdır.

Burada listelenecek çok fazla küçük fark var, bu nedenle birden fazla Regex motoru arasındaki farkları karşılaştırmak için bu referans tablosunu kullanabilirsiniz. Ayrıca, Regex101 gibi Regex hata ayıklayıcıları, Regex motorlarını değiştirmenize izin verir, bu nedenle doğru motoru kullanarak hata ayıkladığınızdan emin olun.

Regex Nasıl Çalışır

Normal İfadeleri oluşturan öğelerin çoğunu oluşturan düzenli ifadelerin eşleşen bölümünü tartışıyoruz. Ancak Regex'inizi gerçekten çalıştırmak istediğinizde, onu tam bir düzenli ifade haline getirmeniz gerekir.

Bu genellikle biçimi alır:

/match/g

Eğik çizgilerin içindeki her şey bizim maçımız. g bir mod değiştiricidir. Bu durumda, motora ilk eşleşmeyi bulduktan sonra durmamasını söyler. Regex'i bulmak ve değiştirmek için genellikle şu şekilde biçimlendirmeniz gerekir:

/find/replace/g

Bu, dosyanın her yerine geçer. Değiştirirken yakalama grubu referanslarını kullanabilirsiniz; bu, Regex'i metin biçimlendirmede çok iyi yapar. Örneğin, bu Regex herhangi bir HTML etiketiyle eşleşecek ve standart köşeli parantezleri köşeli parantezlerle değiştirecektir:

/<(.+?)>/(1)/g

Bu çalıştığında, motor eşleşecektir

ve

, bu metni (ve yalnızca bu metni) değiştirmenize olanak tanır. Gördüğünüz gibi, iç HTML etkilenmez:

Bu, Regex'i metin bulmak ve değiştirmek için çok kullanışlı hale getirir. Bunu yapmak için komut satırı yardımcı programı sed, temel biçimini kullanır:

sed '/find/replace/g' file > file

Bu bir dosya üzerinde çalışır ve STDOUT'a çıkar. Diskteki dosyayı gerçekten değiştirmek için dosyaya (burada gösterildiği gibi) yönlendirmeniz gerekir.

Regex ayrıca birçok metin editöründe desteklenir ve toplu işlemler yaparken iş akışınızı gerçekten hızlandırabilir. Vim, Atom ve VS Code, Regex'in yerleşik bul ve değiştir özelliğine sahiptir.

Tabii ki, Regex de programlı olarak kullanılabilir ve genellikle birçok dilde yerleşiktir. Tam uygulama dile bağlı olacaktır, bu nedenle dilinizin belgelerine başvurmanız gerekir.

Örneğin, JavaScript'te normal ifadeyle veya genel RegExp nesnesi kullanılarak dinamik olarak oluşturulabilir:

var re = new RegExp('abc')

Bu, doğrudan .exec() yeni oluşturulan normal ifade nesnesinin yöntemini veya .replace(), .match(), ve .matchAll() karakter dizisi yöntemleri.

Bir son kullanıcının veya BT yöneticisinin başa çıkabileceği daha sinir bozucu hatalardan biri, Windows içindeki kilitli dosyalardır. Bir klasörü sildiğinizde, bir dosyayı taşıdığınızda veya bir yapılandırmayı düzenlediğinizde ve kilitli bir dosya hata mesajıyla karşılaştığınızda, bununla hızlı ve verimli bir şekilde başa çıkmak daha iyidir.

Bir BT yöneticisiyseniz, başkaları için yazılım yüklemek zorunda kalma olasılığınız yüksektir. Son nokta yönetimi bugünlerde büyük bir iştir ve yüzlerce veya binlerce bilgisayarda yazılım bulundurmak büyük kuruluşlarda yaygındır. Büyük iş genellikle büyük $$ anlamına gelir.

Projeleriniz için sürüm kontrolüne ihtiyacınız varsa, kendiniz barındırmak istiyorsanız, ancak barebone git'i kullanmak istemiyorsanız, bir web arayüzü üzerinden kolay erişim sağlarken tüm kodunuzu saklamak için bir Gitlab sunucusu kurabilirsiniz.

Otomasyon size zaman, para tasarrufu sağlayabilir ve hataları azaltabilir. Bu hedefe yardımcı olmayı amaçlayan popüler bir araç Terraform'dur. Terraform, altyapıyı kod olarak yapılandırma yoluyla sürümlendirme amaçlıdır. Başka bir yaygın uygulama, şirket içi iş yüklerini buluta taşımaktır ve en büyüklerinden biri Amazon Web Services (AWS). Amazon Elastik Bilişim Bulutu (EC2) adı verilen sağlam bir sanal makine (VM) hizmeti sunmanın yanı sıra, EC2 bulut sunucularının Terraform aracılığıyla dağıtımını otomatikleştirme olanağınız da vardır.

Makine öğrenimi büyük bir endüstridir ve AWS'nin kendisine tahsis edilmiş bir hizmet bölümü vardır. ML modellerini çalıştırma hizmetlerinden, uygulamanızla doğrudan entegre edebileceğiniz önceden oluşturulmuş AI destekli hizmetlere kadar neler sunduklarını açıklayacağız.

Diğer tüm yazılımlar gibi, Microsoft SQL Server'ın da güncel tutulması gerekir. Microsoft, SQL Server için yüklenmesi gereken hizmet paketlerini düzenli olarak yayımlar. Bir hizmet paketini yüklemek için, SQL Server'ın uzak bir konsoluna bağlanabilir, yükleyiciyi çalıştırabilir ve sihirbazı tıklatabilir veya bunu kolay bir şekilde yapabilirsiniz.

Related articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0FollowersFollow
0SubscribersSubscribe
spot_img

Latest posts