├── README.md └── düzenli-ifadeler-regular-expressions-regex-nedir-nasil-kullanilir-javascript-ile-regex-kullanimi-kablosuzkedi-youtube-kanali.png /README.md: -------------------------------------------------------------------------------- 1 | # Regular Expressions | Regex | Düzenli İfadeler 2 | 3 | ![Düzenli ifadeler (Regular Expressions | #Regex) Nedir? Nasıl Kullanılır? #JavaScript ile Regex](https://i.ytimg.com/vi/bF_zEzFQZuA/maxresdefault.jpg?v=5fea5ba1) 4 | 5 | Bu doküman [Kablosuzkedi](https://www.youtube.com/kablosuzkedii) Youtube kanalı için hazırlanmıştır. İsterseniz aşağıdaki linkten dersi izleyebilirsiniz :) 6 | 7 | [Düzenli ifadeler (Regular Expressions | #Regex) Nedir? Nasıl Kullanılır? #JavaScript ile Regex](https://youtu.be/bF_zEzFQZuA) 8 | 9 | Eveeett, geldik malum konuya. Regex bize herşeyden önce bir karakter seçim izni verir. Bu karakter veya karakter grubu tamamen sizin bakış açınıza göre değişir. 10 | 11 | ## Flags 12 | 13 | ``` 14 | /g match All 15 | /m multiline 16 | /i case sensitive 17 | /u unicode 18 | ``` 19 | 20 | ## Nicelikler / Notasyonlar 21 | 22 | ### + (one or more) 23 | Bir tane veya şarta uyan birden fazla karakteri tek bir ifade olarak seçer. 24 | 25 | ``` 26 | Aloooo burada ne oluyor acaba? 27 | ``` 28 | 29 | gibi bir cümlede 30 | 31 | ``` 32 | o+ 33 | ``` 34 | 35 | yaparsak bize 36 | 37 | Al**oooo** burada ne **o**luyor acaba? 38 | 39 | ifadelerini dönecektir. 40 | 41 | ### ? Opsiyonel karakter 42 | 43 | Opsiyonel olan karakterleri işaretlememiz için kullanılır 44 | 45 | ``` 46 | Aloooo burada ne oluyor acaba? 47 | ``` 48 | 49 | gibi bir cümlede 50 | 51 | ``` 52 | o+r? 53 | ``` 54 | 55 | yaparsak bize 56 | 57 | Al**oooo** burada ne **o**luy**or** acaba? 58 | 59 | ifadelerini dönecektir. Burada **o+** dediğimiz için **oooo** olarak bize eşleşmenin tamamını verdi. 60 | 61 | ### \* (zero or more) | ? ve + Birleşimi 62 | 63 | **\+** ve **?** birleşimidir. Opsiyonel olarak mümkün olan eşlesmeyi yine birleşim olarak alir. 64 | 65 | ``` 66 | Aloooo burada ne oluyor acaba? 67 | ``` 68 | 69 | gibi bir cümlede 70 | 71 | ``` 72 | o+r* 73 | ``` 74 | 75 | yaparsak bize 76 | 77 | Al**oooo** burada ne **o**luy**or** acaba? 78 | 79 | ifadelerini dönecektir. Çünkü burada **\*** karakterinin özelliğinden dolayı **r** opsiyonel olarak konumlandırılır. Eğer varsa da **o** ve **r** birleşimi olarak ele alacaktır. 80 | 81 | ### \. (nokta) Notasyonu 82 | öncesindeki ya da sonrasindaki yeni satır hariç herhangi bir karakteri temsil eder. 83 | 84 | ``` 85 | Aloooo burada ne oluyor acaba? Yeni video geldi. 86 | Bence güzel bir video olmuş 87 | ``` 88 | 89 | ``` 90 | d.. 91 | ``` 92 | 93 | yaparsak bize 94 | 95 | Aloooo bura**da** ne oluyor acaba? Yeni vi**deo** gel**di.** 96 | Bence güzel bir vi**deo** olmuş 97 | 98 | ifadesini geri dönecektir. Eğer buna bir tane daha **\*(.) nokta** koyarsak 99 | 100 | ``` 101 | d... 102 | ``` 103 | 104 | şeklinde bu sefer seçim 105 | 106 | Aloooo bura**da n**e oluyor acaba? Yeni vi**deo** gel**di.** 107 | Bence güzel bir vi**deo** olmuş 108 | 109 | ifadesini geri dönecektir. 110 | 111 | ##### Fakat Nokta karakterini aramak istersek bu durumda; 112 | 113 | **\\.** ile escape yaparak nokta karakterini arayabiliriz. 114 | 115 | ### \w 116 | 117 | Boşluk olmayan tüm karakterleri teker teker seçer. 118 | 119 | ### \W negatif versiyon (\w) 120 | 121 | \w' nin tersidir. Sadece boşlukları teker teker seçer. 122 | 123 | ### \s 124 | 125 | Boşlukları seçerl 126 | 127 | ### \S Negatif versiyon (\s) 128 | 129 | \s' in tersidir. Boşluklar harici tüm karakterleri teker teker seçer. 130 | 131 | ### \d Sayılar 132 | 133 | Sayıları seçer 134 | 135 | ### \D Sayı olmayanlar 136 | 137 | Sayı olmayan karakterleri seçer. 138 | 139 | ## Aralık belirleme 140 | 141 | ### \{x,y} 142 | **x** karakterden oluşan bir kelime grubu seçer. 143 | **y** belirtilmek zorunda değildir. eğer belirtilmezse x ve daha fazlasi olarak yorumlanır 144 | 145 | ``` 146 | \w{4,} 147 | ``` 148 | 149 | 4 karakterden fazla olan kelimeleri sec. 150 | 151 | ## Karakter Gruplama [fc]at 152 | Başı f **ya da** c ile başlayan **"at"** ile biten kelimeler. 153 | Aynı zamanda karakter gruplamayı bir aralık belirleme için de kullanabiliyoruz. Mesela **a** ile **z** arasındaki tüm karakterler gibi. 154 | 155 | ``` 156 | fat cat hat tat nat Fat Cat 4at 5at 157 | ``` 158 | 159 | ``` 160 | [a-tA-T0-5]at 161 | ``` 162 | 163 | ### Aralık Belirleme 164 | 165 | ``` 166 | [a-z] [A-Z] [a-zA-Z] [0-9] [a-f] 167 | ``` 168 | 169 | gibi.. 170 | 171 | ``` 172 | [a-zA-Z]at 173 | ``` 174 | 175 | ## Gruplama İşlemi (...) 176 | 177 | Sadece 1 karakter degil birden fazla karakteri grup şeklinde almayi saglar 178 | (t|T)he başındaki karakter t ya da T olabilir sonu he ile biter.. 179 | 180 | ``` 181 | The fat cat ran down the street. 182 | ``` 183 | 184 | ``` 185 | (t|e|r){2,3}\. 186 | ``` 187 | 188 | içerisinde t veya e veya r geçen ve sonunda "." ile biren en az 2 en çok 3 karakterlik kelime gruplarini seç. 189 | 190 | Bu bize **eet.** ifadesini verecektir. 191 | 192 | ``` 193 | rerere rarara bir şeyler şampiyon 194 | ``` 195 | 196 | buradan re{2,3} üzerinden ilerleyeceğiz. 197 | 198 | ``` 199 | (re|ra){2,3} 200 | ``` 201 | 202 | içerisinde en az 2 en cok 3 "re" olan kelime gruplarini sec 203 | 204 | ``` 205 | rere gibi ya da rerere 206 | ``` 207 | 208 | ### ^ Satır başındaki karakteri belirleme 209 | 210 | ``` 211 | Sokakta yalnız yürüyorum. 212 | sokak bunun farkında bile değil. 213 | ``` 214 | 215 | ``` 216 | ^[Ss]okak 217 | ``` 218 | 219 | satır başı T veya t ile başlayan he ile biten karakter gruplarını seç! 220 | 221 | ### \$ Satır sonundaki karakteri belirleme 222 | 223 | ``` 224 | \.$ 225 | ``` 226 | 227 | sonu nokta ile biten ifadeler. 228 | 229 | ## Lookahead 230 | 231 | Belirlediğimiz karakter ya da karakter gruplarıyla **devam eden** yada **devam etmeyen** ifadeleri seçmemizi sağlar 232 | 233 | ``` 234 | ifade(lookahead) 235 | ``` 236 | 237 | şeklinde düşünülebilir. 2 farklı yöntemi vardır. 238 | 239 | ### Pozitif Lookahead | Seç - ?= 240 | 241 | Negatif Lookahed'in tam tersidir. Belirlediğimiz karakter ile devam **eden** ifadeleri seçer. Mesela q ile başlayıp u ile devam **etmeyen** bir ifadeyi seçmek istersek 242 | 243 | ``` 244 | quantity and qrcode is really useful 245 | ``` 246 | 247 | ``` 248 | q(?=u)[a-zA-Z0-0]+ 249 | ``` 250 | 251 | şeklinde bir ifade yazılabilir. Buranın açıklmaası ise **q** ile başlayıp **u** ile devam eden kelime grubunu seç demektir. 252 | 253 | Yine aynı metinden yola çıkarak **u** ile devam eden karakterleri **seç** demek istersek 254 | 255 | ``` 256 | .(?=u) 257 | ``` 258 | 259 | bu bize **q** ve **boşluk** ve **f** karakterlerini seçecektir. 260 | 261 | ##### Farklı bir örnek 262 | 263 | ``` 264 | The fat cat ran down the street. rere 265 | ``` 266 | 267 | ifadesinden **at** ile **devam eden** karakterleri seç demek istersen 268 | 269 | ``` 270 | .(?=at) 271 | ``` 272 | 273 | bu ifade bize **f** ve **c** karakterlerini verir. Çünkü cümle içerisinde **at** ile devam eden sadece **fat** ve **cat** vardır 274 | 275 | burada f ve c yi alır. 276 | 277 | ### Negatif Lookahead | Seçme - ?! 278 | 279 | Belirlediğimiz karakter ile devam etmeyen ifadeleri seçer. Mesela q ile başlayıp u ile devam etmeyen bir ifadeyi seçmek istersek 280 | 281 | ``` 282 | quantity and qrcode is really useful 283 | ``` 284 | 285 | ``` 286 | q(?!u)[a-zA-Z0-9]+ 287 | ``` 288 | 289 | burada q ile başlayıp u ile **devam etmeyen** kelime grubunu seçer. [a-zA-Z0-9] ile herhangi bir karakteri gidebildiği karar seçmesini sagladik bu bize **qrcode** kelimesini geri döndürecektir. 290 | 291 | ``` 292 | q(?!r)[a-zA-Z0-9]+ 293 | ``` 294 | 295 | Eğer bu ifadeyi **u** yerine **r** ile değiştirirsek yani q ile başlayıp r ile devam **etmeyen** kelime grubunu seç dersek bu durumda **quantity** seçilecektir. 296 | 297 | Yine aynı metinden yola çıkarak **u** ile devam eden karakterleri **seçme** demek istersek 298 | 299 | ``` 300 | .(?!u) 301 | ``` 302 | 303 | bu bize **q** ve **boşluk** ve **f** hariç diğer tüm karakterleri seçecektir. 304 | 305 | ##### Farklı bir örnek 306 | 307 | ``` 308 | The fat cat ran down the street 309 | ``` 310 | 311 | kelimesinden at ile **devam etmeyen** tüm karakterleri seç demek istersen 312 | 313 | ``` 314 | .(?!at) 315 | ``` 316 | 317 | burada **f** ve **c** hariç hepsini **teker teker seçer** çünkü seçici olarak (.) nokta kullanılmıştır. 318 | 319 | ## Look Behind 320 | 321 | Öncesinde belirlediğimiz karakter ya da karakter gruplarıyla **devam eden** yada **devam etmeyen** ifadeleri seçmemizi sağlar 322 | 323 | ``` 324 | (lookabehind)ifade 325 | ``` 326 | 327 | ### Pozitif Look Behind | Seç - ?<= 328 | 329 | Seçeceğimiz ifadelerin **öncesindeki** karakter ve karakter grubunun **olup olmamasını** kontrol eder. Böylece öncesinde **şu varsa bunu seç** gibi bir seçim yapma durumuna imkan verir. 330 | 331 | ``` 332 | quantity and qrcode is really unuseful but this is an unethical 333 | ``` 334 | 335 | böyle bir cümlede **un** ile başlayan karakterleri seçelim. 336 | 337 | ``` 338 | (?<=un). 339 | ``` 340 | 341 | quantity and qrcode is really un**u**seful but this is an un**e**thical 342 | 343 | karakterlerini verecektir. Çünkü öncesinde **un** karakterleri bulunmaktadır. 344 | 345 | ##### Farklı bir örnek 346 | 347 | ``` 348 | quantity and qrcode is really unuseful but this is an unethical. The man was born in early age. Also the man is really old 349 | ``` 350 | 351 | cümlesinde almak istediğimiz kelimeler **punisher** ve **man** kelimeleri olsaydı. Bunun öncesinde The var mı yok mu diye kontrol edebilirdik. Diğer bir bakış açısı ise The veya the ile başlayan kelimeleri bana nasıl getirebilirdik? olabilir. Bunun için 352 | 353 | ``` 354 | (?<=[tT]he )[a-zA-Z]+ 355 | ``` 356 | 357 | ifadesi bizim için yeterli olacaktır. Çünkü The ya da the bizim seçmek istediğimiz iki farklı kelime olduğu için burada T veya t opsiyonel olmalıdır. Bu ifade bize şunu **punisher** ve **man** kelimelerini verecektir. 358 | 359 | ### Negatif Look Behind | Seçme - \d{3})[ -]?(?\d{3})[ -]?(?\d{4}) 413 | ``` 414 | 415 | ``` 416 | \(?(?\d{3})\)?[\) -]?(?\d{3})[ -]?(?\d{4}) 417 | ``` 418 | 419 | ``` 420 | (\+\d{1}[ -])?\(?(?\d{3})\)?[ -]?(?\d{3})[ -]?(?\d{4}) 421 | ``` 422 | 423 | ``` 424 | (?:(\+\d{1})[ -])?\(?(?\d{3})\)?[ -]?(?\d{3})[ -]?(?\d{4}) 425 | ``` 426 | 427 | ``` 428 | (?:(\+\d{1})[ -])?\(?(?\d{3})\)?[ -]?(?\d{3})[ -]?(?\d{4}) 429 | ``` 430 | 431 | ``` 432 | (?(\+\d{1,}))[ -]?\(?(?\d{3})\)?[ -]?(?
\d{3})[ -]?(?\d{4}) 433 | ``` 434 | 435 | ``` 436 | ((?\+\d{1,2})[ -])?\(?(?\d{3})\)?[ -]?(?
\d{3})[ -]?(?\d{4}) 437 | ``` 438 | 439 | **Video içerisinde yapılan** 440 | 441 | ``` 442 | (?\+\d{2})?[ ]?\(?(?\d{3})\)?[ -]?(?
\d{3})[ -]?(?\d{4}) 443 | ``` 444 | 445 | ### Tarih Validasyonu 446 | 447 | ``` 448 | 14/02/2018 449 | 14-02-2018 450 | 14.02.2018 451 | 14.02.18 452 | ``` 453 | 454 | ``` 455 | (?([0-9]{2}))([\/\-\.])(?([0-9]{2}))([\/\-\.])(?([0-9]{2,4})) 456 | ``` 457 | 458 | **Video içerisinde yapılan** 459 | 460 | ``` 461 | (?\d{2})[\/\-\.](?\d{2})[\/\-\.](?\d{2,4}) 462 | ``` 463 | 464 | ##### ÖDEV 465 | 466 | ``` 467 | 2018/02/14 468 | 2018-02-14 469 | 2018.02.14 470 | 18.02.14 471 | ``` 472 | 473 | ### [url~title] içerisinden bilgileri almak 474 | 475 | ``` 476 | [https://www.videosinif.com~videosinif] 477 | [https://www.kablosuzkedi.com,kablosuzkedi] 478 | [https://www.youtube.com/kablosuzkedi|kablosuzkedi youtube kanalı] 479 | ``` 480 | 481 | İlk olarak URL kısmını alalım 482 | 483 | ``` 484 | (?<=\[)(.*)(?=~) 485 | ``` 486 | 487 | pozitif **look behind** ve pozitif **look ahead** 488 | 489 | ``` 490 | (?((?<=\[)(.*)(?=~))) 491 | ``` 492 | 493 | URL'yi gruplayarak ayıralım 494 | 495 | ``` 496 | (?(?<=~)(.*)(?=\])) 497 | ``` 498 | 499 | title bilgisini de gruplayarak alabiliriz. 500 | 501 | ``` 502 | (?<url>((?<=\[)(.*)(?=[~|\,|\|])))[~\,\|](?<title>(?<=[~|\,|\|])(.*)(?=\])) 503 | ``` 504 | 505 | ``` 506 | (?<url>(?<=\[)(.*)(?=[~,\|]))[~|,|\|](?<title>(?<=[~|,|\|])(.*)(?=\]))? 507 | ``` 508 | 509 | **Video içerisinde yapılan** 510 | 511 | ``` 512 | (?<=\[)(?<url>.*)(?=[~,\|])[~,\|](?<=[~,\|])(?<title>.*)(?=\]) 513 | ``` 514 | 515 | Bu iki ifadenin de ayni gruplarda toplanabilmesi için araya ~ ekleyerek tüm ifadeyi seçtiriyoruz. 516 | 517 | ### Key: value Çiftini almak 518 | 519 | ``` 520 | Name: Gokhan 521 | LastName: Kandemir 522 | Address: Adana 523 | Age: 33 524 | Married: Yes 525 | ``` 526 | 527 | ``` 528 | (?<fieldName>^[a-zA-Z]+): (?<value>[a-zA-Z0-9]+) 529 | ``` 530 | 531 | ### Web Sayfasından linkleri almak 532 | 533 | ``` 534 | <a(\s+)href="(?<url>([^"]*))" 535 | ``` 536 | 537 | ``` 538 | <img(\s)+src='[^']*' 539 | ``` 540 | 541 | [^'] => ' olmayan tüm karakterleri seç 542 | 543 | ### \<body>...\</body> içerisindeki içeriği almak. 544 | 545 | ``` 546 | <body[^>]*>([\w|\W]*)<\/body> 547 | ``` 548 | 549 | ### Email Validasyonu 550 | 551 | ``` 552 | gokhan@gkandemir.com adresinden güzel bir email aldim. peki bu .com uzantılı email adreslerinden çektiğimiz nedir be kardeşim. onunla beraber delphixdfd@gmail.com diye ayri bir ergen zamanlarimda aldigim email adresi de mevcut :D 553 | ``` 554 | 555 | ``` 556 | ([a-zA-Z0-9])+\@([a-zA-Z0-9])+\.[a-zA-Z]{2,} 557 | ``` 558 | 559 | **Video içerisinde yapilan.** 560 | 561 | ``` 562 | \w+@\w+\.[a-zA-Z]{2,} 563 | ``` 564 | 565 | ### URL Validasyonu 566 | 567 | ``` 568 | burada bir ton web sayfası var. https://www.google.com bunlardan bir tanesi. Neden olduğunu bilmiyorum ama http://www.test123.space de bunlardan bir tanesi. Oldukça güzel bir web sayfası daha var burada www.kablosuzkedi.com uzun zamandan beri güncellenmemiş fakat yine de bilgiler işe yarayabilir. Fakat video izlemek isterseniz youtube.com da buna uyan diğer bir güzel web sayfası 569 | ``` 570 | 571 | ``` 572 | (https?:?\/\/)?(www)?\.?[a-zA-Z0-9]+\.[a-zA-Z]{2,} 573 | ``` 574 | 575 | **Video içerisinde Yaptığımız örnek** 576 | 577 | ``` 578 | (https?:\/\/)?(www\.)?([a-zA-Z0-9]+)(\.[a-zA-Z]{2,}) 579 | ``` 580 | 581 | ### Hashtag Ayıklamak 582 | 583 | ``` 584 | Regex için video hazırlıyorum. #Regex ile çözümlemek için Bana uğraştığınız merak ettiğiniz metinleri yazabilir misiniz? Mesela #Web sayfasındaki <body></body> #tag 'leri arasındaki bilgileri almak gibi. Bu #kolay tabi :) #Derdımianlatabilmişimdirumarim :) #360dayscleancode 585 | ``` 586 | 587 | ``` 588 | #[a-zA-Z0-9işüğçöı]+ 589 | ``` 590 | 591 | ### Youtube, Vimeo, İzlesene Video URL Ayıklama 592 | 593 | ``` 594 | data-config-url="https://player.vimeo.com/video/488734703/config?autopause=1&autoplay=1&byline=0&collections=1&context=Vimeo%5CController%5CClipController.main&default_to_hd=1&outro=nothing&portrait=0&share=1&title=0&watch_trailer=0&s=8be48fe12cfacadb79085e9c2acbd6568c1fb641_1609112069" data-fallback-url="//player.vimeo.com/video/488734703/fallback?js" 595 | 596 | ZeroMQ nedir isimli video şu an yayında! https://www.youtube.com/watch?v=YAYp7hbOu7o 597 | 598 | Pentagram'ın güzel bir şarkısı güzel bir şarkı gibi sanki ama eski tadını vermiyor https://www.izlesene.com/video/pentagram-bu-duzen-yikilsin/10523935 599 | ``` 600 | 601 | ``` 602 | (https:\/\/)(www\.)?(?<vimeo>(player\.vimeo\.com\/video\/[0-9]+\/)?)(?<youtube>youtube\.com\/watch\?v=[a-zA-Z0-9]+)?(?<izlesene>(izlesene\.com\/video\/[a-zA-Z0-9\/-]+))? 603 | ``` 604 | 605 | ## JavaScipt ile Yaptığımız Kodlar 606 | 607 | #### JavaScript ile E-mail Validasyonu 608 | 609 | ``` 610 | const email_regex = /\w+@\w+\.[a-zA-Z]{2,}/g; 611 | if (email_regex.test("gokhan@gkandemir.com")) { 612 | alert("Başarılı"); 613 | } else { 614 | alert("Başarısız") 615 | } 616 | ``` 617 | 618 | #### JavaScript ile Hashtag Listesini Almak 619 | 620 | ``` 621 | const regex = /#[a-zA-Z0-9şığüçö]+/gm; 622 | 623 | const str = `Regex için video hazırlıyorum. #Regex ile çözümlemek için Bana uğraştığınız merak ettiğiniz metinleri yazabilir misiniz? Mesela #Web sayfasındaki <body></body> #tag 'leri arasındaki bilgileri almak gibi. Bu #kolay tabi :) #Derdimianlatabilmişimdirumarım :) #360dayscleancode`; 624 | 625 | // console.log(str.match(regex)); 626 | 627 | str.match(regex).forEach(h => console.log(h)); 628 | ``` 629 | 630 | Son olarak isterseniz bu [link üzerinden](https://cs.lmu.edu/~ray/notes/regex/) Regex örneklerini inceleyerek kendinizi test edebilirsiniz. Oldukça faydalı olduğunu söyleyebilirim :) 631 | -------------------------------------------------------------------------------- /düzenli-ifadeler-regular-expressions-regex-nedir-nasil-kullanilir-javascript-ile-regex-kullanimi-kablosuzkedi-youtube-kanali.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gkandemi/regex/31719e8424f94df6fdd33fddbc868e73d348812c/düzenli-ifadeler-regular-expressions-regex-nedir-nasil-kullanilir-javascript-ile-regex-kullanimi-kablosuzkedi-youtube-kanali.png --------------------------------------------------------------------------------