Düzenli ifadeler neden bu kadar çekici görünüyor?


23

Sergi 1 , Sergi 2 , diğer örnekleri hatırlamakta zorlanmayacağınızı tahmin ediyorum.

Şey: bir sorunu çözmenin birden fazla yolu varsa, PHP programcısı (genellikle StackOverflow'ta PHP etiketine göz atıyorum) düzenli ifadeler içeren çözüm konusunda yardım isteyecektir.

Bile daha az ekonomik olacak, hatta php manuel (anlaşılacağı linki ) kullanmak için str_replaceherhangi bir yerine preg_*ya da ereg_*hiç fantezi ikame kuralları gerekli olduğunda fonksiyonun.

Birinin bunun neden olduğu hakkında bir fikri var mı?

Beni yanlış anlamayın, en iyi arkadaşlarımdan bazıları düzenli ifadeler ve Perl'den nefret etmiyorum. Anlamadığım şey, neden herhangi bir alternatif aramamamı, aşırı yüklenme açık olsa bile (dizeleri değiştirmek için regex) veya kod karmaşıklığı üssel olarak yükselse bile ( PHP'de html'den veri almak için regex )


2
Php manual'in gerçekte söylediklerini alıntı yapmak isteyebilirsiniz.
ChrisF

1
Onlar kriptik olduklarından, özel kewl çocuk kulübünün bir parçası olmak ister misin? Ve çoğunlukla, onlar için yapıldığı gibi bir eşleşme ya da çıkarma işlemi yapmanın kısa bir yolunu sağladığı için. Sahte kasalar için kesin, eğer daha iyiyse özel ayrıştırma, ancak hızlı bir regex yazmanın dev zamanı regex'in lehinedir.
haylem

Bu son cümlenin yanlış kısmını vurguladınız: Çirkin kısmı "PHP'den" değil, "html" dir.
Izkata

Yanıtlar:


20

Düzenli ifadeler neden bu kadar çekici görünüyor?

Çünkü bilinçaltı seviyede, kuşatıcı olurken ve kendini ayarlarken (düşünce kalıpları) kendi başına çok şey başarabilen akıllı bir program gibi hissediyorlar.

Bu yüzden insanlar derhal düzenli ifadelerin herhangi bir metin temelli görevini çözeceklerine inanıyorlar, bir şekilde bunun fazladan gelebileceğini düşünmüyorlar ve onun altında olduğumu anlamamış oldum (dilleri ayrıştırıyorlar).

Büyü gücü içeren küçük bir şey. Hayır diyemezsin, değil mi?


5
+1 - Küçük, şifreli bir şey, daha az değil.
AJ Johnson

Hobitses kandırıyorlar
Ben

49

Sahip olduğunuz tek araç bir regex olduğunda, her sorun benziyor ^((?>[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$


16
Bu cevabı seçme cazibesi çok güçlü, ama sanırım burada açık olan ilk sorum ve bir süre ciddiyet hissetmek zorunda olduğum için direnmeliyim.
cbrandolino

1
@Dev, bu çok mantıklı. Benim yorumum, sözde cevap için minnettarlığımı ifade etmek için komik bir yöntemdi.
cbrandolino

17
Bu da neye benziyor?
Tom O'Connor,

4
Bilmiyorum ... Sanırım bu, hepsini özetliyor. Regex'i tanıyorsanız ve diğer yöntemleri bilmiyorsanız, neden aramaya başladınız? Zaten doğru yapılırsa işi halledecek bir aletiniz zaten var. Daha basit bir yönteme rastlayabilene veya anlatılana kadar, regex, gerekenden daha karmaşık olsa bile, hepsini yakalama yöntemi olacaktır.
Aeo,

4
@Tom O'Connor Bir RFC 2822 e-posta adresini eşleştirmenin Regex'e yakın bir şey olduğunu düşünüyorum, ancak birkaç karakter çıkarmam gerekti, çünkü markdown'u çok rahatsız ediyorlardı.
glenatron

23

Sanırım çünkü:

  1. Eşdeğer koda göre fevkalade özlü (doğru kullanıldığında), ve
  2. Programlama dillerinde yaygın olarak desteklenirler, bu nedenle çoğu geliştirici kendilerine aşinadır.

3
# 2 anlamlıdır.
cbrandolino

23

Kariyerimin önceki aşamalarında (yani, PHP öncesi), ben bir Perl guruydum ve Perl gurudomun en büyük bir yönü de düzenli ifadelerin ustalığıydı.

Şu anki takımımda kelimenin tam anlamıyla, diğer (genellikle daha acımasız) araçlardan önce regex'e ulaşan tek kişiyim. Takımın geri kalanına saf sihir gibi geliyorlar. Masama dönecekler ve bir araya gelmem için tam anlamıyla on saniye süren bir regex isteyecekler ve daha sonra çalıştığı zaman havaya uçacaklar. Bilmiyorum - Onlarla çok uzun süre çalıştım, bu noktada sadece doğal.

Düzenli akıcılığın yokluğunda, kafanızda çirkin ve zorlaşan strstr ve strpos ifadelerini saran akış kontrol ifadeleri kombinasyonları kalır. Çok fazla zarif bir regex yapmak istiyorum.


2
Bunu yeterince oylayamıyorum.
CaffGeek

8
Merak ediyorum: regexp'in yazdıklarını akıcı bir şekilde okur musun?
peterchen,

7
Umarım düzenli regex eğitim seansları düzenliyor ve / veya kodunuzun dışını belgeliyorsunuzdur; Aksi takdirde iş arkadaşlarınız için bir destek kabusu yaratıyorsunuzdur. Bu regex'i yazarak kaydettiğiniz zaman, "zarif regex" in ne yaptığını anlamayı deneyen insanlar tarafından yüzlerce kez kaybedilebilir.
Jeff Knecht,

3
Harikulade. Bu yorumlarda, regex'leri sevmekle nefret etmek arasındaki savaş çekişini duyabilirsiniz.
Dan Ray,

1
@Ben Lee: Sanırım öyle - OTOH, vahşi doğada yorumlanmış bir regex ile hiç karşılaşmadım. Regex'lerle ilgili sorunların bir kısmı serinlik tutumuna dayanıyor olabilir.
peterchen

16

Tam aksine. İnsanlar regex papağan IMO çok sık kötü bir yoludur. Preg_match öğesinin aşırı kullanıldığı açık.php , ancak bunu yapmak için zaman zaman duyarlı olduğu daha az açıktır (PHP'de).

Şimdiye kadar gider ve dize işlevlerini kullanmak için php ülkesinde başka bir mikro-optimizasyon olduğunu tahmin ediyorum. Çok ve çok faydalı olan ve genellikle daha iyi bir seçimdir. Fakat preg_matchbirden fazla lehine çekmemelisin strposveif zincir . Uygulamada ortaya çıktığı için libpcre genellikle PHP'nin string alternatifleri arayan bir döngü çalıştırabilmesinden daha hızlıdır.

Yeni bir örnek olarak, bir dizenin tamamen küçük harf olup olmadığını test etmemi sağladı:

 if ($string == strtolower($string))

Şundan daha fazla okunabilir:

 if (!preg_match("/[A-Z]/", $string))

Ve hepsinin PHP olduğu için ilkinin daha hızlı olması gerektiğini varsayarsınız. Fakat gerçekte regex yalnızca bir kez dizeye bakar ve büyük harf bulduğu anda olumsuzlanan durumu iptal edebilir. Strtolower () yaklaşımı, ancak dizeye iki kez bakar. İlk strtolower (), bir harfin her harfin üzerinde yinelenerek, karşılaştırılarak ve üst harflerle çoğaltılmasıyla bir dizgenin çoğaltılmasını sağlar. Sonra== kez daha karşılaştırarak orijinalin ve kopyanın üzerinde tekrar eder.

Yani bu açık bir dava değil. Ve nesnel olmak için ilki genelde daha hızlıdır, çünkü normalde sadece kısa ipleri karşılaştırırsınız. Ancak PHP string işlevlerinin her zaman düzenli ifadeler üzerinde önerilebileceği varsayımıyla kör olmamak şarttır.

( @ Bobince'nin xhtml-regexes ile ilgili eğlenceli cevabı ve son zamanlarda çok işe yaramayan bir şekilde nasıl sıkça bağlandığı ile ilgili başka bir rant eklemeye teşvik ediyorum .)


1
Örnekinize katılıyorum; Yine de, bu özel durumda, yine de ´strtolower () ’tercih ediyorum: Kritik olmayan kodda, bu kadar büyük (diğer uygulamaya göre) yürütme süresi optimizasyonu bile önemsiz Çok büyük bir metin dosyası bulunsa da, bunun yararlı olacağı bir durum düşünemiyorum.
cbrandolino

1
@cbrandolino: Orada tartışma yok. Bu şeyler sadece gerçek bir fark yaratabilecek iç içe döngülerle ilgili ve değerlendirilmelidir .
mario

4
+1 Çünkü insanlar, desteklediklerinden çok daha fazla onları vuruyorlar.
Aralık'ta

1
"Regexp bashers" 'dan biri olarak: Bir "liner" in "mandal" dizgisinin 30 satırla ne anlama geldiğini ifade etmesi eğlencelidir. Ancak, çoğu gerçekçi örnekte bakım sıkıntısı çekmektedir. Ayrıca, bunları doğrulanmamış girişe uygulamaya çalışırken, reddedilen giriş için uygun tanılama işlemleri ek akrobasi gerektirir. Benim için, prototipik "sadece yaz" kodu - hızlı senaryolar için harika, uzun ömürlü uygulamalar için berbat.
peterchen

1
Bütün /xregex'leri, bilişsel öbeklerin dirseği için boşluğa izin vermek ve işlerin neden yapıldığını açıklamak için yapılan yorumlar için elbette kulağını kapalı tutması gerektiğini söyleyenler. Ancak, makul karmaşıklıktaki gerçek regex'ler için gramer regexleri ile yukarıdan aşağıya tasarım kullanmayı düşünmeniz gerekir . Işığı gördükten sonra asla geri dönmeyeceksin /@#$^^@#$^&&*)@#/.
tchrist

8

Normal ifadeler çok çekicidir çünkü normal bir dili ayrıştırmak için en iyi araçtır.

Aşağıdaki avantajlara sahiptirler:

  • Onlar özlü . Belirli bir normal dili ayrıştırmak için bir regexp ile geldiğiniz belirli bir algoritmayı kullanarak genellikle çok daha fazla kod alır.
  • Bunlar hızlı kullanmak. Belirli bir düzenli dil için bir çözümleyici yazmak, bir regexp'den daha önce geldiğiniz belirli bir algoritmayı kullanarak daha fazla zaman alır.
  • Onlar kolay . Özel karakter kümesini ve anlamlarını öğrendikten sonra, bir regexp oluşturmak kolaydır (bunları okumak biraz zor olsa da). Regexps dillerin kendileridir - faydalı bir özellik çünkü türlerimiz dilde çok iyi gelişmiştir.
  • Bunlar hızlı . Derlendikten sonra, bir dize uzunluğunu NO ( N) zamanında eşleştirebilirler .
  • Bunlar esnek . Herhangi bir normal dili eşleştirebilirler ve verilerimizin çoğu normal dil olarak ifade edilir.
  • Onlar her yerde . Çoğu programlama dili temel regexp desteğine sahiptir - dış kütüphaneler aracılığıyla veya dilin içine gömülü. Regexp dillerinin kendileri arasında çok fazla bir değişiklik yoktur.

Bu, onları uygun oldukları durumlar için çekici kılar, ancak insanlar onları en iyi araç olmadıkları durumlarda kullanabilirler, çünkü:

  • Eşleştirdiklerinin bir regexp (örneğin, HTML) kullanılarak ifade edilemeyeceğini anlamayın.
  • Tembeller (kötü bir şekilde) - bir araç tanıyorlar ve yaptıkları için en iyi araç olmadığını biliyorlar, ancak zamanın% 95'i sorunsuz çalışacaklar ve belirli bir öğrenme çabasının% 95'ini alıyorlar ayrıştırıcı veya sıfırdan bir tane yazma.
  • Daha iyi araçların varlığından habersizler.

Er, belli ki devam etmenin en iyi yolu olmadığı ama hala kullanıldığı bazı özel durumlardan bahsediyordum. Regex'i severim (demek istediğim, onları sıkıcı ve cansız buluyorum ama bazı durumlarda hala çok faydalı buluyorum) ve avantajlarının ne olduğunu biliyorum.
cbrandolino

Gerisini kabul ediyorum ama çabuk ve kolay? Öğrenme eğrisi diktir: yeni başlayanlar için, bir ifadenin neden işe yaramadığını anlamak zor ve her regexp uygulamasının en azından ince farklılıkları var gibi görünüyor, bu nedenle oyu nereden öğrenmeye çalıştığınıza dikkat etmeli.
peterchen

Neden herkes tam bir web sayfasını tam bir ayrıştırma ağacına tamamen ayrıştırırken, küçük parça HTML parçalarını ayırmakla karıştırıyor? Gerçekten aptalca. İnanın bana, HTML sayfalarını düzenlerken vi, :%s/foo/bar/gcüzerinde kullandığım hayatınıza bahse giriyorsunuz . Bir editör için yeterince iyiyse, bir senaryo için yeterince iyidir.
tchrist

6

Hmmm, sadece tahmin edebilirim. Belki bazı insanlar kodlarının 30 satırının 20 karakter uzunluğundaki bir regex ile değiştirildiğini deneyimlemişlerdir, bu nedenle regex'ler kullanılabilirken bunun yerine başka bir şey kullanmanın yanlış olduğunu hissediyorlar.


4

Bazı insanların nasıl düşündüğü ile uyuyor. Onları sevmiyorum, ama regexps de düşünen arkadaşlarım var. Sanırım beynindeki örüntü eşleştirme kısmı, biçimsel mantıktan daha fazla maruz kalıyor. :-)


6
Evrimsel tarihimiz açısından bu akla dayanıyor. Dilbilgileri tanımlamadan ya da syllogisms keşfetmeden çok önce kalıpları eşleştiriyorduk.
glenatron,

1
Kabul etmiyorum, programlama mantık ve kalıp eşleştirmeyi içerir, iki alan. Regexps , desen eşleştirmede çok iyidir ve bu tür görevler için kullanılmalıdır. "Onlardan hoşlanmıyorum" deyin, belirli bir iş için iyi bir araç atmaktır.
Aralık'ta

@Orbling: Soru, iyi ya da kötü değil, fakat neden bazılarının onları aşırı kullandığını, diğerlerinin ise kullanmadığını.
Lennart Regebro

Soru olabilir, ancak cevabınız ikisinden biri değil, biri veya diğer bir zihin türünün oyunda olduğunu gösteriyor.
21'de Orbling

"Öner" in doğru kelime olduğunu sanmıyorum.
Lennart Regebro

3

Ben regex ubiquity dizeleri ubiquity kaynaklandığını düşünüyorum. Dize, çoğumuzun öğrendiği ilk basit veri yapısıdır. Tüm kodlarımız sembolik biçimde yazıldığından, programcının bir şeyi sembolik biçimde modellemesini düşünmesi doğaldır. Fakat eğer programlama dilimiz zeki yeni sembolik formlarımız için sözdizimini genişletmeye çalıştığımızda herhangi bir direnç gösteriyorsa, hepsi tırnaklar arasında kalıyor. İlişkisel veri modeli SQL'e sahiptir. XML veri modelinde XQuery var. Ama ne mütevazi dize veri modeli hakkında? Regex!

Daha dün, HTML5 oyun geliştirmesini destekleyen parlak ve yeni bir Javascript çerçevesi için API'yi araştırıyordum. Oyununuzun ihtiyaç duyacağı ana alt sistemleri tanımlamak için bildirimsel bir mekanizması vardır. Bu özellikler nasıl belirlenir? JSON? Akıcı nokta gösterimi? Bir dizi mi? Hayır - özellik adlarının virgül ve boşlukla ayrılmış bir listesini içeren bir dize. Acaba bu listeyi nasıl ayrıştırıyor ...?


2

Çünkü her şeyi bir kerede görebilirsin. Her şeyi görerek, birlikte çalışmak daha kolay olabilir ve bu her zaman güzeldir. Birçok C ++ programcının hala printf-type ifadeleri kullanmasının nedeni gibi bir şey: Typeafe değil.

Yeterince basit bir regex ise, genellikle işleri yapmanın en iyi yolu ARE'dir - kompakt formları ve birçok yeteneği onları belirli işler için mükemmel kılar. Sorun, regex'i o kadar karmaşık hale getirdiğinizde, artık okuyamayacaksınız veya basit bir dize işlemleriyle daha hızlı bir şekilde yapılabilecek bir şeyi yapmak için karmaşık bir regex kullanıyorsanız gelir.

Regex, diğer güçlü araçlar gibi, uygun ölçülerde kullanılmalıdır - çok fazla değil, çok az değil. Performans büyük bir endişe değilse, tek bir regex bazen yazmak ve daha fazla hata ayıklamak için bir dizi string işleminden daha kolay olabilir.


2

Hmm, cari cevaplar teknik yönleri üzerinde çok fazla merkezi ve (okunabilirliği artı / eksi olan önemli bir nokta). Bu yüzden onu biraz daha PHP ortamına / topluluğuna kaydırmayı deneyeyim:

  • PHP Perls küçük üvey kızkardeş . Ve Perl'in ayrılmaz bir parçası düzenli ifadelerdir (o şeyi icat ettiler, değil mi?). Bu nedenle, regexps'in PHP'de de yaygın olmasının nedeni budur.
  • Kullanım durumu PHP tesadüfen normal ifadeler için kullanılması durumunda aksine çok değil. PHP, HTML sayfalarını birbirine yapıştırmak için yapısal olarak kullanılır. Regexps metin üzerinde çalışır. (WReach ne dedi)
  • Mikro optimizasyon . Daha önce de belirtildiği gibi: insanlar algılanan hızlardan sonra sık sık regexps ve / veya PHP string fonksiyonları kullanırlar. PHP çevrelerinde temel bir sorun, regexps'e özgü değil.
  • Düzenli ifadeler yerleşiktir . Python'da, Java'da, C #'de, Ruby'de? Kullanılabilirlik var, ancak fazladan bir modül yüklemek zorunda kalma konusunda caydırıcı. PHP'nin veya Javascript'in temel bir özelliği olduğu yerde kullanım modelinin nasıl değiştiğini görün. Başka bir sergi: CSS daha sık kullanıldığı yerde.
  • PHP kılavuzu hatalı olduğunu. Bu sık sık. Düzenli ifadeler kolayca keşfedilebilir ve bu eğlenceli gerçeği erteledim, çünkü açıkça görülüyor ki sıkıcı: tüm lanet dersler ve PHP tanıtım kitapları her zaman düzenli ifadeler hakkında öğretiyor, ancak kullanım durumlarında eğitim almıyor .
  • Dize API PHP size sihirli tırnak ve namespace \ ayırıcı getiren aynı insanlar tarafından tasarlanmıştır. Bu, Java'dan daha iyi, ancak bütünüyle çekici değil. Özellikle, dizeler nesneler olarak iki katına çıkarsa (Python'a bakın), dize işlevleri regexps'i aşabilir.

Ama bu sadece yan notlarda olduğu gibi. Yine de, genel olarak normal ifadelerin aşırı kullanılmasına ve / veya küçültülmesine yol açan çoğunlukla algısal ve teknik sebeplerin olduğuna inanıyorum. Yine de PHP ve onun kullanıcı tabanı, onu birleştiren birkaç özelliğe sahiptir ve neden SO hakkında daha fazla soru görüyoruz?


1

Genelde normal ifadeleri severim, onları değiştirmek zorunda kalacağım 20 kod satırından daha kolay okunur / anlarım. Kısa düzenli ifadeler hızlı bir şekilde okunur ve anlaşılır ve bakımları nispeten kolaydır (ifade değişirse, değişikliği yapmak için 20 kod satırına bakmak yerine değiştirmek için yalnızca bir satırınız olur). Kötüye kullanıldıkları zamanlar var, ama başka pek çok şey de var.

Muhtemelen bu kadar suiistimal görmenin nedeni, StackOverFlow'un PHP bölümüne göz atmanızın, orada pek çok olgunlaşmamış PHP programcısı olduğunu bildiğinizden emin olduğum içindir.


1

Düzenli ifadeler neden bu kadar çekici görünüyor?

Onlar değil. Aslında cehennem kadar çirkinler. Ve anlaşılmaz. Onlar en kısa sürede öldürülmesi gereken bir kötülük.

Şimdi, bu söyleniyor, küçük bir Perl uygulamasında hata ayıklamaya gidiyorum. Yardım edemem; talihsiz, onlar hala iş için hala en iyi araçtır.


4
Düzenli ifadelerin ne "normal" ne de "etkileyici" olduğunu söylemekten hoşlanmıyorum
Andrew Barber

2
Onları anlamıyorsanız çirkin ve anlaşılmazlar. Regex'in zenine ulaştığında, gerçekten çok zarifler.
Dan Ray,

1
-1 Bütün programcıların gizlenmekten hoşlandığına karar vermek için ve sonra başka bir olası açıklama yapmamak. ... Neden çirkin veya anlaşılmaz olduklarını düşündüğünüzü söylemeliyim.
Macneil

1
@Macneil - Lütfen, (evet, düşüncelerim bu çizgide olsa da), eğer beni alıntı yapmadıysanız, yapmadığım bir şeye karar verdiğimi / karar verdiğimi söyleme (yorumunuzun ilk kısmı). Sorunuz kadarıyla onları güzel buluyorsunuz? ... Yapmıyorum. Ve bu öznel bir site olduğundan ve bu öznel bir görüş olduğundan, üzerinde durmaya gerek yok. Ben de bu konuda deneyem.
Rook

1
@Rook - Bence çoğu insan karmaşık bir düzenli ifadeye bakıyor, tüm düzenli ifadelerin çirkin olduğuna karar veriyor ve sonra düşünmeyi bırakıyor. Gerçek şu ki, onlar hakkındaki önyargınızı ortaya koyarsanız çok zarif ve etkileyici bir araç. BTW, kendi mantığınızla, pek çok programcı cebir yapamaz, bu yüzden cebir büyük olasılıkla kötüdür ve açıkça anlaşılabilir olmadığı için kaldırılmalıdır.
Dan Ray,

0

İnsan aracı kullanan bir yaratıktır ve düzenli ifadeler güçlü araçlardır. Düzenli ifadeler için güzel bir metafor, şarküterinin et dilimleyicisidir. Kağıt incecik dilim hindi, konserve dana eti vb. İstiyorsanız, sadece bir şey var. Ancak, onu kullanmak için yetenekli ellere ihtiyacınız vardır, çünkü kendinizi çok kötü bir şekilde kesebilirsiniz ve kan görene kadar hiçbir şey hissetmezsiniz. Bununla demek istediğim, düzenli ifadelerdeki büyük sorunun onları hafifletmek olması, yapmamanız gereken şeylerle eşleşmeniz anlamına gelir ve bunun tersi olur ve süreç içinde daha fazla soruna neden olana kadar öğrenemezsiniz.


0

Düzenli ifadeler çok çekicidir çünkü güç kullanırlar. Çok az sayıda karakterle çok karmaşık bir iş yapabilirsiniz.

Buradaki sorun, standart normal ifade yapısının Turing-complete olmamasıdır ; bunun anlamı, normal bir ifadeyle basitçe uygulayamayacağınız programlar olduğu ve insanlar , normal ifadelerin görünür gücüyle cezalandırıldığı zaman bunu BİLMEMELERİ anlamına gelir.

Bu - sanırım - "şimdi iki sorunu var" jwz-alıntı için nedeni budur .

Perl düzenli ifadelerinin Turing tamamlandı olduğunu tahmin ediyorum , ancak görünüşe göre henüz kesin olarak kanıtlanmadı veya kanıtlanmadı.


0

Çünkü bu, uygulandığında güçlü bir araç olan sonlu durumlu bir makineyi programlamanın verimli bir yoludur. Temel olarak, FSM'lerin programlanması için bir dildir; bu dili bilmeniz durumunda faydalı, eğer bilmezseniz can sıkıcıdır.


0

Tecrübelerime göre, regex'ler eski bir sanat gibidir, belirsiz bir şeydir, bazı insanlar onlara kızdırırlar çünkü ilgili sihirbazlığı anlayamazlar ve belki de kimse size açıklayamayacaklarından dolayı. Üniversitelere, e-postaları eşleştirmekten daha önemsiz bir şey için onlara öğrettiğini duymadım. Sonra mistik içsel işleyişi var, çünkü çoğu insan onları anlamadığından yavaş olmaları gerekiyor . Ve ilk denemede iyi çalışmalarını sağlamak, yeni gelenler için her zaman bir zorluktur.

Aynı şey Perl, awk, Linux ve parlak düğmeleri veya güzel renkli sözdizimi olmayan her şey için söylenebilir. Yani, "önemsiz görevlere" eklenen karmaşıklık gibi, sadece bazı döngüler, bölmeler, bir anahtar, biraz sihir ve bu işte işe yarayabilecek bir şey. Ancak, yolun diğer tarafındaysanız, regex'ler, kötü döngüler veya hata ayıklamak için daha fazla şey olmadan sinyal sesi gibi görünen güzel çerez kesicilerdir. Onları sağladıkları esneklik için de seviyorum. Eşleşecek model değiştiğinde, algoritmayı veya aracı / neyi değiştirmeden yalnızca regex'i değiştirirsiniz ve tekrar hoş bir şekilde çalışır. Ve onlar sihirli bir dize olduğundan, dilerseniz kaynak kodun dışına koyabilirsiniz. Ve beni perl hakkında düşündüren başka bir şey, 20+ karakter uzunluğunda bir regex yazarsanız, çok şey başardığınızı hisseder, en azından benim için, sadece çok temiz ve kompakt. Ayrıca tembel bir programcıyım, hoş bir kod ve yorum içeren çok fazla kod yazmaktan ve karışıma bazı hatalar eklemekten hoşlanmıyorum.

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.