Her programcının düzenli ifadeleri öğrenmesi şart mı? [kapalı]


82

Programlamada yeniyim ve bir röportajda düzenli ifadeler hakkında bir sorum var; cevap veremem dememe gerek yok. Yani normal ifadeyi öğrenip öğrenmemem gerektiğini merak ediyordum. Tüm alanların her programcısı için bir zorunluluk mu? Veya bazı belirli alanlar için programlama yapmak şart mı?

İlgili sorular:


55
Ne olduğunu, ne zaman kullanılacağını ve nasıl yazıldığını google sözdizimi şahsen biliyorum.
omuzlarını

35
Tüm güç kullanıcıları için bir zorunluluktur. Programcılar üretken olmak için uzman kullanıcılar olmak zorundadır.
SK-mantık

8
Neden onları öğrenmek istemiyorsun? Onları tanımaktan faydalanacağınız en az bir durumla karşılaştınız. Kendinizi gelecekte benzer bir durumda bulmanızın bir nedeni yok mu?
FishBasketGordo

23
Sadece metinle çalışanlar :)
Steve Jackson

Yanıtlar:


113

Düzenli ifadeler, çoğu geliştiricinin daha sonra veya daha sonra öğreneceği birçok dilde kullanılabilen inanılmaz derecede kullanışlı bir araçtır.

Bir görüşmeci için, görüşme sırasında deneyim almanın güzel bir yoludur. Onları anlamayan yılların deneyimini iddia eden birisiyle görüşüyorsanız, daha fazla kazmanız gerekir.


4
Kabul ediyorum, herhangi bir deneyimli geliştirici için bu iyi bir soru. Ancak onlar hakkında çalışma tecrübesi olmayan yeni bir mezuna soru sormak büyük olasılıkla biraz haksızlıktır - başvuruları gerçekten pratik bir programlama deneyimi yaşamadan filtrelemek istemedikleri sürece.
SK-mantık

2
@ SK-mantık: Okula bağlı. Hepimiz 2. yılda, düzenli ifadeleri oldukça fazla kullanan zorunlu bir kurs aldık (itiraf ediyorum, onlara bağlı kaldım;). Ve birkaç üst düzey kurstan daha fazlası, bir daha asla tam olarak olmasa da, onları tekrar gündeme getirdi.
SinirliFormsDesigner'la

Yukarıdaki yorumlarla anlaştım - okuldan yeni çıkmış birinin mutlaka düzenli ifadeler bilmesini beklemiyorum. Ama yine de sorabilirim.
ptyx

13
Ben bir matematikçiyim, bu yüzden bilgisayar bilimlerinde resmi bir geçmişim yok, ancak dilbilgileri, ayrıştırıcıları, otomatları ve her şeyi keserken regexlerin aslında üniversite derslerinde öğretildiğini düşünürdüm. Aslında üniversiteden yeni çıkmış birinin, CS eğitimi olmayan deneyimli bir programcı hakkında daha iyi bir bilgiye sahip olacağını ummuştum. : - /
Andrea

8
@Andrea, üniversitedeyken (Bilgisayar Bilimi alanında lisans derecesi) gramer ve otomatları öğrenirken normal ifadeler gerçekten de ele alındı. Bununla birlikte, uygulamaların değil, yalnızca örgün kavramdı. POSIX veya Perl uyumlu normal ifade sözdizimini ya da kodlamada nasıl kullanılacağını öğrenemedik. Sonlu durumlu bir otomatın durum şemasını çizmeyi, düzenli ifade olarak yazmayı vb. Öğrendik. Grep ve metin dosyaları değil, Yunan harfleri dahil edildi.
Adam Jaskiewicz

54

Normal ifadeler bir araçtır. Çok yararlı bir araç olduğu için birçok insan nasıl kullanılacağını öğreniyor. Ancak, bu belirli aracı nasıl kullanacağınızı öğrenmeniz için bir "gereklilik" yoktur, başka bir şey öğrenmeniz için bir "gereklilik" olmaktan daha fazlası yoktur.


19
Bu, mantıksal mantığın anlaşılmasının faydalı, ancak gerekli olmadığını söylemek kadar doğrudur.
08

1
@Oded: Kursumda öğretilen boole mantığı için herhangi bir kullanım bulamadım.
DeadMG

16
@DeadMG, dönüşümlerde olduğu gibi her zaman boole mantığı kullanıyorum: if (!(foo && bar))=> if (!foo || !bar). Belki de kullanıyordunuz ve fark etmediniz, ya da belki de doğru materyali öğretmediniz.
zzzzBov

7
Sürüm kontrolü gibi mi? Veya yazılım testi?
Konrad Rudolph

2
@ruakh - Son derece faydalı olduklarına katılıyorum; Onları her zaman kendim kullanırım. Tüm programcıların regex'leri kariyerlerinde bir noktada nasıl kullanacaklarını öğrenmeleri gerektiğini düşünüyorum . Ancak soru bunu sormadı.
eykanal

33

Örneğin, bir oyun programcısı veya LHC'deki bir programcı düzenli ifadeler öğrenmemişse şaşırmam. Bir oyun programcısına, SQL'i bilmeme konusunda bile başarılı olabilirim.

Ancak, herhangi bir türde bilgi sisteminde çalışıyorsanız ve normal ifadeleri bilmiyorsanız, kendinize bir kötülük yapıyorsunuzdur.

Kapak tarafında, standart IS programcınızdan bir oyun programcısının alacağı matris matematiğini bilmesini beklemiyorum. Programcının farklı disiplinleri var, ancak "bilgi sistemleri" şemsiyesi altına girmeliyiz.


1
LHC'deki programcılar, sensörler tarafından üretilen veri dosyalarını aramak için düzenli ifadeler kullanabilir. Oyun programcıları, oyunlarının ürettiği günlük dosyalarını aramak için normal ifadeler kullanabilirler. Tamam, bunlar olmayabilir var , ama muhtemelen böyle görevler çok daha kolay yapabiliriz.
SinirliFormsDesigner'la

1
Katılıyorum, ancak bir oyun programcısı pozisyonu için röportaj yapıyor olsaydım, normal bir ifadenin ne olduğunu bilmedikleri halde hala birini tutardım. Hangi normal ifadelerin ne olduğunu bilmeyen geleneksel bir iş programlama rolünde birini işe alırsam, muhtemelen işe alınmayacaktı.
Jonathan Rich,

Bu adil, sanırım.
SinirliFormsDesigner'la

7
Parçacık fizikçilerinin çoğu benzeri olmayan ortamlarda çalışırlar, ancak bu toplulukla ilgili diğer tüm bilgisayarlarda olduğu gibi çoğu beceri sözlü gelenekler tarafından iletilir. Regexps'de gelişmişlik seviyeleri değişkenlik gösterir. Ancak verileri regexps ile aramıyoruz : çok fazla var ve bu metin formatlarında değil. Günlükleri ve geçici DB'leri, kodları ve yarı-asitli belgeleri, diğer herkes gibi ararız.
dmckee

1
@FrustratedWithFormsDesigner ile, regex bilmeyen bir oyun progrmmer kiralamam. Programlama, doğası gereği , alandan bağımsız olarak bilgi yoğunluğudur . Ne yaptığınız önemli değil - herhangi bir disiplinde kaynak kodunuz, regex özellikli metin düzenleyicileriniz ve günlük dosyalarınız var. Regex olmadan olacaktır (eğer sevk oyunda regex tek bir satır yazmak gerekmez bile) belirli görevleri yerine getirirken önemli ölçüde daha az verimli olacak. Regex'in bir oyun programcısı için gerekli olduğunu söylemiyorum . Sadece bilmeyen birini işe almayacağımı söylüyorum.
Ben Lee,

22

Normal ifadeler, metindeki kalıplarla nasıl eşleştirileceğini ifade etmenin çok net bir yoludur.

Metinden veri ayrıştırma ve ayıklama veya bazı metnin belirli bir desene uyduğunu doğrulama gereksinimi programlamada çok sık ortaya çıkıyor, bu nedenle evet, onlar hakkında bilgi edinmek ve onları anlamak önemlidir.

Bunlar araç kutunuzda olması için iyi bir araçtır ve deneyimli bir programcının bunları nasıl kullanacağını bilmesini beklerdim.

Düzenli ifadeler hakkında bilgi edinmek için en iyi kaynaklardan biri Jeffery Friedl'in Normal Düzenli İfadeler Mastering kitabıdır . Oldukça ileri olduğundan, daha fazla deneyiminiz olduğunda okumak isteyebilirsiniz.

Öğretici ile regular-expressions.info adresinden başlayabilirsiniz .


2
Bu benim için zevk meselesi. Onlara hiç ihtiyacım olmadı. Onları birkaç projede kullandım, bu yüzden nasıl çalıştıklarını biliyorum, ancak kolayca olmadan başarabilirdim ve onlara ihtiyaç duyduğumdan daha sık suistimal ettiklerini gördüm. Bir kalıbı basitleştirmek ve karmaşık bir karakter dizisi manipülasyonu kullanmak ve daha hızlı kullanmak (e) BNF'yi kullanmaktan daha hızlı bir şekilde kullanmak istiyorsanız, ayrıştırıcılarla çalışmaya alışkınsanız
Rune FS

15

Buradaki cevapların çoğunluğunun aksine regs bilgisinin verimli bir programcı olmak için gerekli bir beceri olduğunu sanmıyorum. Bir pozisyon için adaylarla röportaj yaparken, reg becerilerini kendilerine açma zorunluluğu hissettiklerinde daha derine inerdim. Neden? sık sık yerlerinde kullanılırlar çünkü doğru çekiçten hoşlanırlar, ancak çoğu zaman ihtiyacınız olan bir tornavidaydı. HTML ve regex için SO'da arama yapın ve birkaç soru ve regex'in uyumsuz olmasının nedenleri hakkında birkaç sebep göreceksiniz.

Mülakatçıyı işe almak için savunuculuk yapmadan önce, düzenli ifadeler bilgisi kesinlikle gerekli değildir. Ve gerçekte kimsenin sizin regexleri bilen, ancak kullanılan çerçevenin analizi, tasarımı ve bilgisi gibi alanlarda eksik kalan daha üretken bir programcı olduğuna inandığını sanmıyorum.

Bazen kullanışlı olduklarından eminim, ancak profesyonel bir geliştirici olarak 20 yıldan fazla bir süredir, kodları 20 kattan daha az kullandım (ve hatta birkaç perl komut dosyası bile koydum) Arama yapmak için bunları düzenli olarak kullanıyorum ve olsa yerine.


Düzenli ifadeler bilmeyen programcılar, düzenli bir ifade çok iyi çalıştığında, genellikle büyük bir WTF yığını oluşturur. SADECE normal ifadeleri bilen programcılar, normal ifadelerle normal olmayan dilleri (örn. HTML) işlemeye çalışan daha küçük fakat büyük ölçüde yanlış WTF yığını oluşturur.
kevin cline

14

Çalıştığınız etki alanı ne olursa olsun, düzenli ifadeler, programlama dillerinin çoğu düz metin olarak yazıldığından, bilmek yararlı bir araçtır. Bu nedenle Regex, kaynak kodunuzu değiştirmek ve yeniden düzenlemek için harika bir yoldur ve birçok metin düzenleyicisine eklenmiştir. Düzenli bir ifadeyle değişiklikleri çok daha hızlı ve doğru bir şekilde yapacağı zaman, sayısız programcının kaynak dosyalarda tekrarlanan değişiklikler yaptığını gördüm.

Pragmatik Programcı'nın 3. Bölümünün, “temel programlamanın hammaddesi” olduğu düz metinle bahsettiği şey budur.


Neden yeniden ateşlemeyi destekleyen bir IDE kullanmıyorsun?
NimChimpsky,

2
Bu yazıdaki soruyu sorsaydım size onay işareti verirdim. Asla regex bilmeyen birini işe almamamın en önemli nedeni bu. Onu kullanan tek bir kod satırı yazmanıza gerek kalmasa bile , güçlü bir kod düzenleme ve günlük arama aracıdır. Bunu bilmeyen biri, bazı günlük görevlerde daha az verimli büyüklük düzenleri olacak.
Ben Lee,

10

Jeff Atwood, normal ifadeler hakkında harika bir blog yazdı , bu harika alıntı:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

Ayrıca iyi bir soruya göz atmak isteyebileceğiniz bir yığın taşması cevabı da vardır .

Kesin olarak biraz bilmelisin. Düzenli ifadelerin öğrenilmesi kolaydır ancak ustalaşması zordur. Kullanmaya başlamak için onunla ilgili her şeyi öğrenmenize gerek yok. Sadece bu konuda mantıklı olun.

 

tl; Dr.

Teknolojiyi bilmeniz gerekir, böylece ne zaman kullanılacağına dair iyi bir karar verebilirsiniz.


8

Kullanılabilir normal bir ifade kütüphanesine sahip olmayan gömülü bir kod tabanında çalışıyorum. Belli bir görev 275 kod satırı gerektiriyordu ve test cihazıyla geliştirici arasındaki tüm köşe davalarında hata ayıklamak için yaklaşık iki hafta sürdü. Daha sonra bir javascript yardımcı programının bir parçası olarak aynı şeyi yapmak için bir fonksiyon yazdım. Kesin düzenli ifadeler kullanarak aynı görevi kod 10 satır kullanılır ve yaklaşık 15 dakika içinde mükemmel çalıştı.

Eğer Do gerek normal ifadeler? Teknik olarak değil, ama kasten etkili bir aracın bilgisiz kalması aptalca.


6

Başka bir cevap alıntı yapmak için:

Normal ifadeler, metindeki kalıplarla nasıl eşleştirileceğini ifade etmenin çok net bir yoludur.

Eğer bu işinizin önemli bir parçasıysa, geliştirdiğiniz sistemi tasarlamak için muhtemelen daha iyi bir yol var. Çok fazla metin, bölgenize özgü etki alanı olmadığı sürece (örn. Biyoinformatik).

Üç farklı kurumsal sistemde çalıştım (on yılı aşkın üç farklı şirkette) ve bunları beş kereden az yazdım ve buna temel bir e-posta doğrulayıcısının iki kez kopyalanıp yapıştırılmasını da dahil ettim.


2
Birçok metin her zaman alana özgüdür. Ne de olsa bir programcısın . Metin (kaynak kod biçiminde) etki alanınızdır. Düzenli ifadelerle metni verimli bir şekilde değiştirmek sizi daha verimli bir programcı yapar.
quanticle

2
@ Hiçbir anlam ifade etmiyor. Aslında kaynak kodunuzu düzenli ifadelerle mi değiştiriyorsunuz? Bu mutlak bir kabus gibi geliyor. Normal ifadeler kodunuzun bir parçasıdır ve kodunuz alana özgü verilerle etkileşime girer.
NimChimpsky

3
Kaynak kodu düzenli ifadelerle değiştiririm. Büyük kod parçalarını elle yeniden toparlamak sıkıcı ve hataya açıktır. Düzenli ifade bul ve değiştir'i destekleyen bir düzenleyici kullanmak (ipucu: hemen hemen her düzenleyici regexp bul ve değiştir'i destekler) yeniden düzenlemeyi çok daha kolaylaştırır.
miktar

3
@Dunk, bir projenin ömrü boyunca büyük bir verimlilik artışı olduğunu söylemedi, bunun yerine küçük bir zaman diliminde büyük bir kazanç olabileceğini söyledi. Ayrıca onlarca dosyada yüzlerce, hatta binlerce değişikliğin olduğu yerde yeniden yapılanma yaptım. Projenin ömrü boyunca, kaydedilen saatler önemsizdir, ancak kesinlikle aynı değişiklikleri el ile yapmak için alacağı saatleri veya günleri almak istemedim. Modern IDE'ler sizin için bir regex yazmadan sizin için yapabilirler, ancak bazen yapamazlar (örneğin, ortak bir atama paterni değiştirir).
jmoreno

2
@NimChimpsky Regexps her yerde çalışır. IDE'ler ve yeniden düzenleme araçları yalnızca belirli diller için çalışır. Örneğin, yeniden düzenleme aracınız tüm şablonlarımı gözden geçirmeme ve telefon numarasına benzeyen bir dize bulmam / silmeme izin verir mi ( sites.google.com/site/steveyegge2/… )?
hesapçık

4

Düzenli ifadeler çok kullanışlı, diller arası, platformlar arası bir işlem aracı olarak düşünülebilir. Kodumda regex kullanabilirim, editörümde regex kullanabilirim, komut satırında regex kullanabilirim!

Sadece ihtiyacınız değil ya da onları öğrenmeniz gerekir. Daha çok

VAOV! REGEX'i SEVİYORUM!


4

Harika bir programcı olmak için tüm küçük regex tuhaflıklarını bilmek zorunda değilsiniz, çünkü özellikle hepsi farklı uygulamalar ve programlama dilleri etrafında biraz farklılık gösterme eğilimindedir. Ne yapmak bilmek gerekir ise

  • Düzenli ifadeler ve regex'ler nelerdir?
  • Ne tür şeyleri verimli bir şekilde yaparlar (normal dilleri ayrıştırma)
  • Ne tür şeyler yetersizdir (iç içe geçmiş öğeleri ayrıştırma, tonlarca geri bildirim kullanma)
  • Ne zaman okumanız veya yazmanız gerektiğinde sözdizimi hakkında nereden bilgi edinebilirsiniz.

Her neyse, ilk etapta onları öğrenmek için çok çaba harcayacağından endişe bile etmenize gerek yok. En basit operatörler ( ., *, |, (), vs) neredeyse evrensel mevcut ve bir go uzun bir yol!


Bunun gerçekten iyi bir nokta olduğunu düşünüyorum. Bazı RE motorlarının geri referanslarını ve diğer gelişmiş özelliklerini nasıl kullanacağınızı bilmek sadece orta derecede faydalıdır. Çoğu durumda, RE'lerin kullanımını bir miktar mantıkla birleştirmek daha okunaklı ve bakımı kolaydır.
Mark Bessey

3

Daha önce de belirtildiği gibi Regex bir araç , çok yararlı bir araç IMHO.

Bu örneği düşünün:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Örneğin, 1000000.00 gibi bir sayıyı "1.000.000.00" değerine dönüştürmek için yalnızca bir satır

Başka bir yöntem kullanmak çok daha karmaşık olacaktır


2
ve bu karmaşık değil mi? bu, standart regex setinde bulunmayan birkaç özellik kullanır. basit bir uzunluk ve doldurma bunun için gayet iyi olurdu
cırcır ucube 22

2

Bu bir zorunluluk değil. Sadece onların varlığının ve ne zaman kullanılacağının farkında olmanız gerekir. Sözdizimi özelliklerini google ve çevrimiçi araçları kullanarak bulmak ve doğru elde etmek kolaydır.


2

Gerçekten regexps öğrenmeni tavsiye ederim. İşyerinde, programcıları işe alırken, regexp'i bilmeyen adaylar genellikle çabucak elden çıkarılır. Düzenli ifadeleri kesinlikle bilmeleri gerektiği için değil, ancak programlama ve programlama bağımlılığı seviyelerinin çok iyi bir göstergesi olduğu için.

Gerçek bir programcı düzenli ifadelerini bilir

Ancak bu biraz önyargılı, çünkü çoğunlukla web programlarına katılıyorum. Düzenli ifadelerin hem sunucu tarafında hem de müşteri tarafında çokça karşılaşmanız gereken bir şey. Bulaşık makinesinde yerleşik bir sistem için bir montaj programcısıysanız, muhtemelen normal ifadelerle karşılaşmazsınız. Ancak, çoğu zaman düzenli ifadeler (arama ve değiştirme, bir dosyayı arama, birden çok dosyada arama yapma, vb.) Bildiğiniz zaman, geliştirme ortamınızı daha iyi kullanabildiğiniz için, muhtemelen kullanışlı olacaktır.

Ayrıca, bildiğiniz takdirde diğer programcılar tarafından onaylanmayı daha kolay bulacaksınız.


Ayrıca, birçok farklı lehçe olduğu için, tüm özellikleri başlangıçta ezbere öğrenmek boşunadır. Bunun yerine, temelleri öğrenmeye odaklanmaya çalışın: (1) birkaç basit regexps oluşturun ve anlamını öğrenin. * + {} [] () ve - ve birkaç temel sınıf. (2) verilen bir özellik elinizde, karşılaştığınız regexpes'de neler olduğunu anlamaya çalışın.
Aron Cederholm

Ne kullanıyorsunuz reg exp yr web dev için exps. Yaptıklarımı ve 10 yıl boyunca 5 kez kullandıklarını +.
NimChimpsky

Bir başlangıç ​​için: Kullanıcı girişini ayrıştırma veya doğrulama (örneğin e-posta, posta kodu / posta kodu, kullanıcı arama formları). Ayrıca, I18n ve l10n için, birden fazla dilde / yerde özel ve değişken çeviri dizeleri için kullanılır. Ve bazı hata tespitlerinde ve oldukça fazla hata işleme konusunda yardım aldıklarından eminler. Ve WMS / forum biçimlendirme için CMS / bloglar / yorumlar dünyasında. Harici veriler için (kullanıcı girişi, kazınmış sayfalar, senkronize edilmiş kaynaklar, vb.) İçeriğin / bağlantıların / her neyse ayrıştırma, işleme ve yeniden yazma. Ayrıca, birçok istatistik ve kayıt amaçlı kullanım için (tarayıcı tespiti,
başvuru

Böyle cahilce cahil bir yorum için -1 "Gerçek bir programcı ..."
Dunk

Bu, kullanıcı girişini doğrulamanın oldukça yüzeysel bir yoludur ve regex'leriniz% 100 doğru olsaydı (e-posta doğrulaması meşhur olan), sürpriz yapmam gerekirdi. Ve regex's - er wtf kullanarak diller arasında çevirdiğiniz bu "çoklu dilde / yerelde özel ve değişken çeviri dizeleri" ifadesini kullanmıyorum. İstatistik amaçlı - düzenli ifadelerle istatistik mi yapıyorsunuz? Bağlantıları / içeriği regexlerle yeniden yazmak bana bir kod kokusu gibi geliyor.
NimChimpsky

1

Bu bir zorunluluk mu? Bilmeniz gerekenleri zaten biliyorsunuz: onların var olduğu, ne oldukları ve ne için kullanıldığı. Bir programcı olarak işiniz problemleri çözmektir. Artık probleminizi çözmek için onları çözümünüze yansıtmaya başlayacak kadar bilginiz var. Regexs öğrenmeli misiniz? Kesinlikle. Öncelik size kalmış ... her gün kullanılacağı işler ve asla kullanılmayacakları işler var. Basit bir rehber, karşılaşmayı umduğunuz problemlerle eşleşen ne kadar kalıp gerektireceğidir.


1

Hmm, bu dizeler listesini virgülle ayırmam ve çıkarmam gerekiyor, ayırıcı argüman alan bir for döngüsü içeren fonksiyonu yazmama izin verin ve bunları birlikte eklemeye devam edin ... ya da sadece bu mevcut 'birleştirme' komutunu kullanabilirim.

Bu karmaşık nesnelere, her nesnenin sahip olduğu birkaç niteliğe dayanarak sıralama yapmam gerekiyor, kendime bunu yapan bir sıralama fonksiyonunu nasıl yazacağımı hatırlatmama izin verin, ah beklemeyin, sadece bu dilin desteklediği mevcut standart sıralama fonksiyonunu kullanabilirim. Özel bir karşılaştırıcı yazmayı öğrenmek zorunda kalacağım ama çok zor olmamalı, açıkçası kendi sıralama fonksiyonumu korumamdan daha iyi.

Sanal yöntemler fikrinden biraz korkuyorum, ancak bu, her biri farklı türden bir öğe için bu listeleri tek bir listeye indirgememe yardımcı olmalı. O zaman, her listeyi farklı bir şekilde işleyen yarım düzine benzer ifade yazmak zorunda değilim. Sanırım çok çalışmalı ve bunları öğrenmeliyim, çünkü kodum bunu yaparsam çok daha basit ve daha temiz olacak.

Bu metin dosyasından diğer tüm bu gürültülerin arasında bu kelime ve değer çiftlerini çıkarmam gerekiyor, karakterleri tek tek okumak için elli satırlık bir çözümleyici yazmama izin verin ve karakterlerden biri olduğum şeyin başlangıcı gibi görünüyorsa Arıyorum bu durum değişkenini ayarlayacağım ve ayrıştırmaya farklı şekilde başlayacağım ve bu yüzden vb ... Tabii ki benim durumum o kadar özel ki, hiç kimse daha önce böyle bir konuya rastlamadı ve bir satır süren genel bir çözüm icat etti. kod yapmak için. Bu bana ikinci el kitapçıya hiç okumadığım programlama kitaplarını almam gerektiğini hatırlatıyor.


1

Kısa Cevap: Hayır Ama .... Bilgi güçtür.

Ben bir web geliştiricisiyim ve normalde ihtiyaç duyduğum herhangi bir Normal İfadeyi buluyorum. Ancak, kopyalayıp yapıştırma ile ilgili sorunlar yaşadım ve ne yaptığını ya da yapmadığını fark etmedim, bu bir şeyi kopyalayıp yapıştırma tehlikesidir.

Bir örnek: Kopyaladığım ve yapıştırdığım bir e-posta adresi bir süre veya artı e-posta adresi belirtiminde izin verilen bir e-postaya izin vermedi. Aslında, birçok kişi, spam kullanmayı tercih etmesi durumunda 'sitename' filtrelemesinin kolay olması için actualemail+sitename@gmail.com ile gmail kullanır.


0

düzenli ifadeler? Hmmm ... bazen onları tanımak yararlı olur ama çoğu zaman hep aynı şeyi kullanıyorsunuz. Regex'i çok sık kullandım ama iyi olduğumu söylemeyeceğim. Hiç hoşuma gitmiyor ve bence regex'ten daha önemli şeyler olduğunu biliyorum.

Ancak formüler veya verilerin doğrulanmasında çok faydalıdır. Bence hemen hemen her profesyonel form regex ile doğrulandı. ASP.NET kullanarak.

Ama hiç: İhtiyacınız olduğunda ve kaydettiğinizde bir ifade yapmayı deneyin. Bunları umarım bir kereden fazla kullanırsınız. Ama RegEx ile zamanınızı boşa harcamayın!


0

Çalıştığınız bölgeye / platforma bağlıdır.

  1. Masaüstü uygulaması için, düzenli ifadeler hakkında hiçbir şey bilmeden, bir yaşam sürdürebilirsiniz. Ama aklınızda bulundurun, Visual Studio'nun düzenli ifade araması var, ancak herhangi birinin düzenli olarak kullanıp kullanmadığını merak ediyorum. Sanmıyorum (ilk önce düzenli ifadenizi düzeltmek zorundasınız çünkü bir arama yapabilirsiniz).

  2. Bir web geliştiricisi olarak büyük olasılıkla Normal İfade'yi öğrenmeniz gerekecektir. Ondan kurtulabilirsiniz çünkü çevrimiçi olarak kod snippet'ini kolayca bulabilir ve ihtiyaç duyacağınız kadar kolay bir şekilde öğrenebilirsiniz.

Düzenli ifadenin vazgeçilmez bir araç olduğu belgeler, davalar, yasal şeyler gibi alanlar vardır. Bunu bilmek zorundasın. Eğer yapmazsan basitçe işi alamayacaksın.

Kısacası, eğer bir iş tanımının parçası değilse, bunun için bile uğraşmayın. Öğrenmeyi seviyorsanız, eğlenmek için öğrenin.


0

Düzenli ifadeler çok yararlı bir araçtır ve programcının bunları kullanması gereken birçok durum vardır. Kullanmak için hepsini ezbere öğrenmemelisin. Sadece referans kullanın ve görevinizi yapın. Normal ifadeleri kullandığınız 10-20-50-100 (programlayıcıya bağlı olarak) görevlerinden sonra, hepsini yürekten bilirsiniz. Kendileri tarafından öğreniliyorlar, onları özel olarak öğrenmemelisin.


0

Buna zaten birçok cevap görüyorum, ancak hepsi programcının araç kutusundaki bir araç olarak normal ifadeleri bilmenin yararları hakkında görünüyor .

Düzenli ifadeleri, birinin bilgisayarların nasıl çalıştığını anlamasını genişleten bir tür bilgi olarak düşünmeyi tercih ederim. Birisi gerçekten normal bir dilin ne olduğunu öğrendiğinde ve onu üç basit işlemle ifade edebileceğinize göre, basit dizeleri doğrulamak için basit bir aracın ötesinde bir şey verdiğine inanıyorum.

Genel olarak ayrıştırmayı daha iyi anlayabildiler, bu da her türlü programlamada hemen hemen kullanışlıdır ve düzenli olarak kullandığımız araçların (derleyici, editör, tarayıcı vb.) Nasıl çalıştığını daha iyi anlar.

Düzenli ifadeler kullanmanın pratik yararları elbette çok büyük. Onlarla “program yapmasanız” bile - editörümde sürekli bul / değiştir işlevini yerine getiren düzenli ifadeler kullanıyorum ve beni ne kadar daha verimli hale getirdiklerini ölçtüm.

Dolayısıyla, gerekli olmasa da, bir programcının öğrenmesi gereken ilk araçlardan biri olduğunu düşünüyorum.


0

Rob Pike öyle düşünmüyor :

Düzenli ifadeler yazmak zordur, iyi yazmak zordur ve diğer teknolojilere göre pahalı olabilir. Standart lexing ve ayrıştırma tekniklerinin yazılması çok kolay, çok genel ve böylece uyarlanabilir, düzenli ifadeler kullanmak için hiçbir neden yoktur.

Buna bakmanın başka bir yolu, sözlüklerin ve ayrıştırmanın statik olarak tanımlanan kalıplarla eşleşmesidir, ancak düzenli ifadelerin gücü kalıpları dinamik olarak ifade etmenin bir yolunu sağlamalarıdır. Metin editörlerinde ve arama araçlarında harikalar, ancak derleme zamanında aradığınız şeyleri rahatsız ettiğinizde, düzenli ifadeler ihtiyaç duyduğunuzdan daha fazla genellik ve esneklik getirir.

Tüm metin işleme problemleri için düzenli ifadeleri her derde deva olarak teşvik etmek sadece tembel ve zayıf mühendislik değil, aynı zamanda onları hiç kullanmaması gereken insanlar tarafından kullanımlarını da güçlendirir.

Pike'nin elbette bir yeri olduğunu ve IMHO’nun normal ifadelerin oldukça güçlü bir araç olduğunu, kullanmayı öğrenmek için harcadığım zamanı kesinlikle ödüllendirdiğini ve bu açıdan kesinlikle öğrenmeyi öneriyorum. onlar. Ama asıl mesele şu ki, onların lexing ve ayrıştırma konusunda benden daha az şey bilmemden benden kurtulmama izin veren bir yara bandı olmaları mümkün. :)


0

Söyleyeyim, Düzenli İfadeler genellikle iş için doğru araçtır ve özellikle çok fazla metin işleme yapan uygulamalarda oldukça kullanışlıdır. Ancak, onları ezberlemek delilik. Tüm özel karakterlere, çapalara, karakter sınıflarına, desen değiştiricilere, meta karakterlere sahip duvarımda tutturulmuş bir hile sayfam var. her şeyin izini sür. İhtiyacınız olan tek şey, ihtiyacınız olduğunda düzenli bir ifade yazabilmektir, ki bu genellikle yaklaşık 6 ayda bir - iş için kullanılabilecek en iyi araç olan bir problemle karşılaştığınız sıklıkta. Perl, Lateks, Emacs veya başka bir ağır metin işleme ekibinde değilseniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.