Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression
No Match

/
/
gm

Test String

Code Generator

Generated Code

const regex = /Şekil \d+.?’(de|da|te)/gm; // Alternative syntax using RegExp constructor // const regex = new RegExp('Şekil \\d+.?’(de|da|te)', 'gm') const str = `Çizge yapılarının öncelikli kullanım alanları ağ yapılarıdır. Karmaşık veri grupları arasındaki ilişkilerin gösterilmesinde büyük kolaylıklar sağlamaktadır. En kısa yol ve ağ analizi gibi popüler problemlerin çözümü için veri yapılarının önemli parçalarından birisidir. Temel olarak bir çizge Düğüm ve Kenar olmak üzere iki elemandan oluşmaktadır. Şekil 1’de genel çizge yapısı verilmiştir. Çizge adını “Graph” kelimesinin baş harfinden almaktadır ve ‘G’ ile gösterilir ve tanıma bağlı kalacak biçimde küme olarak G = (D,K) şeklinde tanımlanır. Burada belirtilen D ifadesi düğümlerin kümesini simgelerken K ifadesi ise, düğümler arasındaki bağlantıları sağlayan doğru veya kenar kümesidir. Çizgeler yönlerine göre Yönlü, Yönsüz ve Karışık olmak üzere 3’e ayrılabilir. Yönlü çizge: Şekil 2.’de görüldüğü üzere bütün kenarlar arasında tek yönlü bir bağlantı vardır. Yönsüz çizge Şekil 3’de gösterildiği üzere çizgeyi oluşturan bütün kenarlar yönsüz ise bu çizgeye yönsüz çizge denmektedir.Eğer bir çizgeyi oluşturan kenarlardan bazıları yönlü ve bazıları ise yönsüz ise bu çizgeye karışık çizge denmektedir. Şekil 4.’de karışık çizgeye ait örnek verilmiştir.Çizge kenarları üzerinde bağlantının yoğunluğu, uzunluğunu, sağlamlığını belirten ifadeler olabilir. Bu tür çizgelere ağırlıklı veya maliyetli çizgeler denmektedir. Eğer çizge içerisindeki bütün kenarların maliyeti 1 veya birbirine eşitse bu çizge ağırlıklı çizge olarak adlandırılmaz. Bu çizgelerde yön bilgisi de belirtilmemişse basit çizge olarak isimlendirilir. Çizge üzerinde yapılan modellemeye göre çok çeşitli kullanım alanları mevcuttur. Bunlarda bazıları; Şehirler arasındaki uzaklıkların belirtilmesinde, Yönlendiriciler arası bant genişliklerinin gösteriminde, Nesneler arasındaki uzaklıkların belirtilmesinde, bağlantılı nesnelerin ilişki kuvvetlerinin belirtilmesinde vb.. birçok uygulama alanı için kullanılabilir. Şekil 5’de iller arasındaki uzaklık değerleri verilen ağırlıklı çizgelere örnek bir yapı verilmiştir.Uygulamadan yapılan bütün sayısal ve grafiksel analiz sonuçları için R programlama dili kullanılmıştır. Yazar benzerlik ve çizge modelleme işlemleri için standart R kütüphanelerine dâhil olmayan 3. Parti R kütüphaneleri projeye dâhil edilmiştir. İlerleyen bölümlerde bu kütüphaneler hakkında bilgi verilecektir. R ve Kütüphaneler R dili ilk 1991 senesinde Aucland Üniversitesi istatistik bölümünde Ross Ihaka ve Robert Gentleman tarafından geliştirilmiş ve 1993 yılında duyurulmuştur. R ismini yazarların isimlerinin baş harfinden almaktadır. R dili bütün işletim sistemlerinde çalışacak şekilde tasarlanmıştır. Açık kaynak bir yazılım olarak yayınlanan R dilinde basitten gelişmişe yönelik birçok analiz çözümü bulunmaktadır. R’ın açık kaynak kodlu olması birçok firma (Microsoft, Oracle, SAP, IBM vb..) ve yazılımcı tarafından destek görmesine ve bunun bir sonucu olarak zengin içeriklere sahip 3.parti analiz kütüphanelerinin oluşmasını sağlamıştır. Çok sayıda paket ve kütüphaneye erişim imkânı olan R kullanıcıları, aynı analiz işlemi için birden fazla farklı yönteme hazır olarak ulaşma imkânına sahiptirler. Yayın çalışmasında kullanılan 3.parti kütüphanelerden bazıları; Ggdendro :Veriyi dendogram ve ağaç diagramlarına dönüştürmek için kullanılmıştır. Dplyr : Veri işlemeyi kolaylaştıran bir pakettir. İgraph : Graf işlemleri yapabileceğiniz ve görselleştirebileceğiniz bir kütüphane. Network3d : Grafın 2 boyutlu olarak modellenmesinde kullanılmıştır. Treejs : Grafın 3 boyutlu olarak modellenmesinde kullanılmıştır. Geliştirme ortamı olarak ise R studio ide kullanılmıştır. Paket ve kütüphanelerin kolay bir şekilde yüklenebilmesi ve ara yüzünün sadeliğinden dolayı tercih edilmiştir. Benzerlik Yöntemleri Bilgisayar üzerinde veriler arasındaki ilişkilerin tespit edilebilmesi için matematiksel formları arasındaki bağlantıların ortaya çıkarılması gerekmektedir. Bunun için birçok benzerlik ölçüsü oluşturan algoritma geliştirilmiştir. Bu çalışmada yazarlar arasındaki benzerliklerin tespit edilmesi için anahtar kelimelere Jaccard, İbn-i Sina (Öklid), Kosinüs (Cosine) benzerlik yöntemleri uygulanmıştır. Jaccard Metinler arasındaki ilişkinin ölçülmesi amacıyla geliştirilen başarılı bir benzerlik çıkarma yöntemidir. Kısaca indeks iki metin arasındaki ortak özelliklerin çıkarımlarını yaptıktan sonra bu özelliklerin toplam özellik sayısına bölünmesi ile elde edilir. Aşağıdaki denklemde Jaccard benzerlik indeksinin formülü denklem 1 de verilmiştir.Jaccard benzerlik indeksi 0 ile 1 arasında hesaplanan bir değerdir. Bu değer büyüdükçe benzerlik oranının yükseldiğini belirtmektedir. Benzerlik oranı yükseldiğinde benzerlik mesafesi kısalacağından dolayı Jaccard mesafesi, benzerlik indeks değerinin 1 den çıkarılması ile elde edilmektedir. Denklem 2’de Jaccard benzerlik mesafesi formülü verilmiştir. Bir örnek ile açıklayacak olursak; Furkan ve Murat iki yazar olsunlar. Bu yazarların çalıştıkları alana ait bilgiler aşağıdaki gibidir. Furkan : (Büyük veri, Veri madenciliği, Yapay zekâ, Görüntü işleme) Murat : (Veri madenciliği, Yapay zekâ, Çizge analiz, Bulut bilişim, Görüntü işleme ) İki yazara ait bütün terimlerimize baktığımızda (Büyük veri, Veri madenciliği, Yapay zekâ, Çizge analiz, Bulut bilişim, Görüntü işleme) ifadelerinden oluşur. Furkan ve Murat isimli yazarların ortak çalıştıkları konu sayısı = (Veri madenciliği, Yapay zekâ, Görüntü işleme) = 3 Yazarların çalıştıkların toplam konu sayısı = (Büyük veri, Veri madenciliği, Yapay zekâ, Çizge analiz, Bulut bilişim, Görüntü işleme) = 6 olarak tespit edilmiştir. Formülü uygularsak Jaccard(A,B)=|A∩B|/|A∪B| = 3/6 = 0,5 olarak iki yazar arasındaki benzerlik oranı bulunmuştur. Jaccard mesafe ölçüsü ise benzerlikle ters orantılı olduğu için Denklem-2 deki formül ile 1-0,5 = 0,5 olarak bulunmaktadır. İbni Sina (Öklid) Uzaklığı İbn-i Sina mesafe yöntemi çok yaygın olarak kullanılmaktadır. Veri yoğun ve sürekli olduğunda bu en yakın yaklaşımdır. İki nokta arasındaki İbn-i Sina uzaklığı iki noktayı birbirine bağlayan noktadır. Pisagor teoremi bu iki noktayı vermektedir. Denklem 3 de formül verilmiştir. Kosinüs (Cosine) İki metin arasındaki mesafeyi trigonometrideki kosinüs fonksiyonu üzerinden formülüze etmeyi amaçlamıştır. Metinlerin birer vektör olarak düşünüldüğü bu yaklaşımda iki vektörün birbiri ile ilişkisi bir açı ile ifade edilmektedir. Aynı yönü gösteren iki vektör için kosinüs değeri 1 olacaktır (cos(0)=1). Tamamen birbiri ile ilişkisiz olan vektörler için ise kosinüs değeri 0 olacaktır ( cos(90) = 0. Dik vektörler (orthogonal vectors)). Son olarak tamamen birbirini zıddı olan dokümanlar için, ki bu dokümanlar için aralarında ilişki yoktur denemez, kosinüs değeri -1 olacaktır. Bu şekilde iki metindeki bütün değerler +1 ve -1 arasında sayısallaştıracaktır. Denklem 4’de kosinüs benzerlik indeksinin formülü verilmiştir.Metinler arasındaki benzerliklerin tespitinde daha anlaşılır olması için kosinüs benzerlik yöntemini bir örnek ile açıklayacak olursak; Furkan ve Murat iki yazar olsunlar. Bu yazarların çalıştıkları alana ait bilgiler aşağıdaki gibidir. Furkan : (Büyük veri, Veri madenciliği, Yapay zekâ, Görüntü işleme) Murat : (Veri madenciliği, Yapay zekâ, Çizge analiz, Bulut bilişim, Görüntü işleme ) İki yazara ait bütün terimlerimize baktığımızda (Büyük veri, Veri madenciliği, Yapay zekâ, Çizge analiz, Bulut bilişim, Görüntü işleme) ifadelerinden oluşur. Dokümanlarda bu ifadelerin kaç kere geçtiğini bulacak olursak; Furkan :[1,1,1,0,0,1] Murat :[0,1,1,1,1,1] şeklinde ifade edilebilir. Formül üzerinden bu iki vektör için kosinüs değerini hesaplanırsa.A*B = [1,1,1,0,0,1].[0,1,1,1,1,1] = (1)*(0) + (1)*(1) + (1)*(1) + (0)*(1) + (0)*(1) + (1)*(1) = 3 sonucu elde edilir. Şimdi vektörlerin boyutlarını hesaplanabilir. Bunun için İbn-i Sina uzayından (Euclidean space) faydalanılır ve her boyuttaki değerlerinin karelerini toplayarak toplamın karekökü alınır. ||A|| = sqrt((1)^2 + (1)^2 + (1)^2 + (0)^2 + (0)^2 + (1)^2) = 2 ||B|| = sqrt((0)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2) = 2.2360679775 Cosin(A,B) = (A*B) / (||A|| ||B||) = 3 / ( 2 x 2.2360679775) = 3 / 4.472135955 = 0.67082039325 İki yazarın ilgi alanlarını baz alarak kosinüs benzerliğini bulunmuştur. Çalışmada 306 adet bildiriye ait 536 adet yazar ve bu yazarların yayınlarında kullandıkları 1188 adet anahtar kelime kullanılmıştır. Bu verilerden her yazarın yayınlarında kullandıkları anahtar kelimeler filtrelenerek veri tabanına aktarılmış ve benzerlik işlemlerinde kullanılmak üzere matris formuna getirilmiştir. Matris formu satırlar yazarları, sütunlar ise anahtar kelimeleri ifade edecek şekilde oluşturulmuştur.DAP 2018 Veri Seti IDAP 2018 yılına ait örnek veri setinin bir kısmı Tablo 1’de belirtilmiştir. Tablo 2’de ise matris formuna dönüştürmek için verinin farklı bir formu verilmiştir.Matris Formuna Dönüşüm Yazar ve konular arasındaki bağlantı yoğunluklarının tespit edilmesi için veriler matris formuna dönüştürülmüştür. Yazarlar satırlarda belirtilirken kolon değerlerinde ise anahtar kelimeler verilmiştir. Matris 536 x 1188 boyutunda olup toplam 636.768 adet veri içermektedir. Tablo 3’de matris yapısının bir örneği verilmiştir.Grafın 2 ve 3 Boyutlu Olarak Modellenmesi IDAP konferansının 2 ve 3 boyutlu modelleri Şekil 6 ve Şekil 7 de belirtilmiştir. 2 boyutlu modelleme için R dilinde tanımlı network3d kütüphanesi ve 3 boyutlu modelleme için ise treejs kütüphanesi kullanılmıştır.Şekil 8 de Ali Karcı isimli yazara ait anahtar kelime bağıntıları verilmiştir. Yazarın yayınlarında kullanmış olduğu bu anahtar kelimeler ile diğer yazarlar arasında benzerlik bağıntısı oluşmuştur.Şekil 9’da Ali KARCI, Furkan ÖZTEMİZ ve Doygun DEMİROL isimli yazarların Yerçekimi arama algoritması isimli anahtar kelime ile bir birlerine bağlandığını görebilirsiniz. Bu durum 3 yazarın ayrı ayrı veya ortak olarak yaptıkları en az 1 çalışmada Yerçekimi arama algoritmasını anahtar kelime olarak belirtmiş olduğunu ifade etmektedir.`; // Reset `lastIndex` if this regex is defined globally // regex.lastIndex = 0; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); }

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions