{"id":39095,"date":"2026-02-14T11:40:54","date_gmt":"2026-02-14T08:40:54","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=39095"},"modified":"2026-02-14T11:40:54","modified_gmt":"2026-02-14T08:40:54","slug":"javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/","title":{"rendered":"Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler"},"content":{"rendered":"<p><body><\/p>\n<h2>Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde metin i\u015fleme, do\u011frulama ve ayr\u0131\u015ft\u0131rma i\u015flemleri s\u0131k\u00e7a kar\u015f\u0131m\u0131za \u00e7\u0131kar. E-posta adreslerinin ge\u00e7erlili\u011fini kontrol etmek, kullan\u0131c\u0131 giri\u015flerini belirli bir formata g\u00f6re do\u011frulamak, log dosyalar\u0131ndan belirli bilgileri ay\u0131klamak veya karma\u015f\u0131k metinleri analiz etmek gibi pek \u00e7ok senaryoda g\u00fc\u00e7l\u00fc bir araca ihtiya\u00e7 duyar\u0131z. \u0130\u015fte bu noktada <strong>D\u00fczenli \u0130fadeler (Regular Expressions &#8211; Regex)<\/strong> devreye girer. Regex, metin desenlerini tan\u0131mlamak i\u00e7in kullan\u0131lan, son derece esnek ve g\u00fc\u00e7l\u00fc bir mini dildir. Java, bu yetenekleri <code>java.util.regex<\/code> paketi arac\u0131l\u0131\u011f\u0131yla eksiksiz bir \u015fekilde sunar. Bu makalede, Java&#8217;da d\u00fczenli ifadelerin temellerinden ileri seviye kullan\u0131m\u0131na, s\u00f6zdiziminden pratik \u00f6rneklere kadar her \u015feyi detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h2>Giri\u015f: D\u00fczenli \u0130fadeler Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>D\u00fczenli ifadeler, metin dizileri i\u00e7inde belirli karakter kal\u0131plar\u0131n\u0131 (desenlerini) aramak, e\u015fle\u015ftirmek ve manip\u00fcle etmek i\u00e7in kullan\u0131lan bir karakter dizisi bi\u00e7imidir. Kelimenin tam anlam\u0131yla, metinler \u00fczerinde g\u00fc\u00e7l\u00fc bir arama ve de\u011fi\u015ftirme motoru gibidirler. \u0130lk olarak 1950&#8217;lerde matematik\u00e7i Stephen Kleene taraf\u0131ndan geli\u015ftirilen d\u00fczenli ifadeler, bilgisayar bilimlerinde ve \u00f6zellikle metin i\u015fleme alan\u0131nda vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir.<\/p>\n<h3>D\u00fczenli \u0130fadelerin G\u00fcc\u00fc ve Uygulama Alanlar\u0131<\/h3>\n<p>D\u00fczenli ifadelerin g\u00fcc\u00fc, basit bir karakter aramas\u0131ndan, karma\u015f\u0131k desen e\u015fle\u015ftirmelerine kadar geni\u015f bir yelpazede kullan\u0131labilmesinden gelir. Bir metin i\u00e7inde &#8220;elma&#8221; kelimesini bulmakla &#8220;ge\u00e7erli bir e-posta adresi&#8221; desenini bulmak aras\u0131ndaki fark\u0131 d\u00fc\u015f\u00fcn\u00fcn. \u0130kinci senaryo, sadece belirli karakterlerin varl\u0131\u011f\u0131n\u0131 de\u011fil, ayn\u0131 zamanda bu karakterlerin belirli bir s\u0131rada ve say\u0131da olmas\u0131n\u0131 da gerektirir. D\u00fczenli ifadeler, bu t\u00fcr karma\u015f\u0131k desenleri k\u0131sa ve \u00f6z bir \u015fekilde ifade etmemizi sa\u011flar.<\/p>\n<p>Uygulama alanlar\u0131 olduk\u00e7a geni\u015ftir:<\/p>\n<ul>\n<li><strong>Veri Do\u011frulama:<\/strong> E-posta adresleri, telefon numaralar\u0131, kredi kart\u0131 numaralar\u0131, \u015fifreler, IP adresleri gibi kullan\u0131c\u0131 girdilerinin belirli formatlara uygunlu\u011funu kontrol etmek.<\/li>\n<li><strong>Metin Ayr\u0131\u015ft\u0131rma (Parsing):<\/strong> Log dosyalar\u0131ndan, yap\u0131land\u0131r\u0131lmam\u0131\u015f metinlerden veya HTML\/XML belgelerinden belirli bilgileri (tarihler, URL&#8217;ler, say\u0131lar vb.) \u00e7ekmek.<\/li>\n<li><strong>Arama ve De\u011fi\u015ftirme:<\/strong> Metin edit\u00f6rlerinde, IDE&#8217;lerde veya programatik olarak metin i\u00e7indeki belirli desenleri bulup ba\u015fka bir metinle de\u011fi\u015ftirmek.<\/li>\n<li><strong>Veri Temizleme:<\/strong> \u0130stenmeyen karakterleri veya formatlar\u0131 metinlerden kald\u0131rmak.<\/li>\n<li><strong>Dil \u0130\u015fleme:<\/strong> Do\u011fal dil i\u015fleme (NLP) uygulamalar\u0131nda tokenizasyon, k\u00f6k bulma gibi \u00f6n i\u015flemleri yapmak.<\/li>\n<\/ul>\n<h2>Java&#8217;da D\u00fczenli \u0130fadeler: <code>java.util.regex<\/code> Paketi<\/h2>\n<p>Java, d\u00fczenli ifade yeteneklerini <code>java.util.regex<\/code> paketi arac\u0131l\u0131\u011f\u0131yla sunar. Bu paket, iki ana s\u0131n\u0131f etraf\u0131nda d\u00f6ner: <code>Pattern<\/code> ve <code>Matcher<\/code>. Bu s\u0131n\u0131flar, d\u00fczenli ifade desenlerini derlemek ve bu desenleri hedef metinler \u00fczerinde uygulamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h3><code>Pattern<\/code> S\u0131n\u0131f\u0131: Deseni Derleme<\/h3>\n<p><code>Pattern<\/code> s\u0131n\u0131f\u0131, bir d\u00fczenli ifadeyi derlenmi\u015f bir g\u00f6sterimine d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131l\u0131r. Bir d\u00fczenli ifade deseni, Java&#8217;da bir <code>String<\/code> olarak ifade edilir. Ancak bu <code>String<\/code> do\u011frudan metin \u00fczerinde arama yapamaz. <code>Pattern.compile()<\/code> metodu kullan\u0131larak derlenmesi gerekir. Derlenmi\u015f bir <code>Pattern<\/code> nesnesi, birden fazla e\u015fle\u015ftirme i\u015flemi i\u00e7in tekrar tekrar kullan\u0131labilir ve bu, performans\u0131 art\u0131r\u0131r, \u00e7\u00fcnk\u00fc desenin her seferinde yeniden ayr\u0131\u015ft\u0131r\u0131lmas\u0131na gerek kalmaz.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\n\npublic class RegexBaslangic {\n    public static void main(String[] args) {\n        \/\/ Bir d\u00fczenli ifade deseni tan\u0131ml\u0131yoruz\n        String regex = \"java\";\n\n        \/\/ Deseni Pattern nesnesine derliyoruz\n        Pattern pattern = Pattern.compile(regex);\n\n        System.out.println(\"Desen ba\u015far\u0131yla derlendi: \" + pattern.pattern());\n    }\n}\n<\/code><\/pre>\n<h3><code>Matcher<\/code> S\u0131n\u0131f\u0131: Deseni Uygulama ve E\u015fle\u015ftirme<\/h3>\n<p><code>Matcher<\/code> s\u0131n\u0131f\u0131, derlenmi\u015f bir <code>Pattern<\/code> nesnesini belirli bir giri\u015f metnine uygulamak ve e\u015fle\u015fmeleri bulmak i\u00e7in kullan\u0131l\u0131r. Bir <code>Matcher<\/code> nesnesi, <code>Pattern<\/code> s\u0131n\u0131f\u0131n\u0131n <code>matcher()<\/code> metodu arac\u0131l\u0131\u011f\u0131yla olu\u015fturulur. <code>Matcher<\/code> nesnesi, metin i\u00e7indeki e\u015fle\u015fmeleri bulmak, bunlar\u0131n konumlar\u0131n\u0131 belirlemek ve e\u015fle\u015fen alt dizeleri \u00e7\u0131karmak gibi i\u015flemleri ger\u00e7ekle\u015ftiren bir dizi metoda sahiptir.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexEslestirme {\n    public static void main(String[] args) {\n        String metin = \"Bug\u00fcn java \u00f6\u011freniyorum. Java \u00e7ok e\u011flenceli.\";\n        String regex = \"java\";\n\n        Pattern pattern = Pattern.compile(regex);\n        Matcher matcher = pattern.matcher(metin);\n\n        \/\/ Metin i\u00e7inde e\u015fle\u015fme olup olmad\u0131\u011f\u0131n\u0131 kontrol ediyoruz\n        while (matcher.find()) {\n            System.out.println(\"E\u015fle\u015fme bulundu: '\" + matcher.group() + \"' ba\u015flang\u0131\u00e7 indeksi: \" + matcher.start() + \", biti\u015f indeksi: \" + matcher.end());\n        }\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte <code>matcher.find()<\/code> metodu, metinde bir sonraki e\u015fle\u015fmeyi arar. Buldu\u011funda <code>true<\/code> d\u00f6ner ve e\u015fle\u015fen metni <code>matcher.group()<\/code>, ba\u015flang\u0131\u00e7 indeksini <code>matcher.start()<\/code> ve biti\u015f indeksini <code>matcher.end()<\/code> ile alabiliriz. E\u011fer e\u015fle\u015fme bulunamazsa <code>false<\/code> d\u00f6ner ve d\u00f6ng\u00fc sona erer.<\/p>\n<h2>Temel Regex S\u00f6zdizimi ve Karakter S\u0131n\u0131flar\u0131<\/h2>\n<p>D\u00fczenli ifadelerin g\u00fcc\u00fc, kulland\u0131\u011f\u0131 \u00f6zel karakterlerde ve bunlar\u0131n kombinasyonlar\u0131ndad\u0131r. Bu karakterlere &#8220;meta karakterler&#8221; denir.<\/p>\n<h3>Literal Karakterler ve Meta Karakterler<\/h3>\n<p>\u00c7o\u011fu karakter, kendisini temsil eder (\u00f6rne\u011fin, &#8216;a&#8217; harfi &#8216;a&#8217; harfini e\u015fle\u015ftirir). Bunlara <strong>literal karakterler<\/strong> denir. Ancak baz\u0131 karakterler \u00f6zel anlamlara sahiptir:<\/p>\n<ul>\n<li><code>.<\/code> (nokta): Yeni sat\u0131r karakteri (<code>\\n<\/code>) hari\u00e7 herhangi bir karakteri e\u015fle\u015ftirir.<\/li>\n<li><code>\\<\/code> (ters e\u011fik \u00e7izgi): Bir meta karakterin \u00f6zel anlam\u0131n\u0131 iptal etmek veya \u00f6zel bir karakteri belirtmek i\u00e7in kullan\u0131l\u0131r (ka\u00e7\u0131\u015f karakteri). \u00d6rne\u011fin, <code>\\.<\/code> ger\u00e7ek bir noktay\u0131 e\u015fle\u015ftirir.<\/li>\n<li><code>^<\/code>: Metnin ba\u015flang\u0131c\u0131n\u0131 veya sat\u0131r\u0131n ba\u015flang\u0131c\u0131n\u0131 e\u015fle\u015ftirir.<\/li>\n<li><code>$<\/code>: Metnin sonunu veya sat\u0131r\u0131n sonunu e\u015fle\u015ftirir.<\/li>\n<li><code>*<\/code>: \u00d6nceki karakterin s\u0131f\u0131r veya daha fazla tekrar\u0131n\u0131 e\u015fle\u015ftirir.<\/li>\n<li><code>+<\/code>: \u00d6nceki karakterin bir veya daha fazla tekrar\u0131n\u0131 e\u015fle\u015ftirir.<\/li>\n<li><code>?<\/code>: \u00d6nceki karakterin s\u0131f\u0131r veya bir tekrar\u0131n\u0131 e\u015fle\u015ftirir (iste\u011fe ba\u011fl\u0131).<\/li>\n<li><code>{n}<\/code>, <code>{n,}<\/code>, <code>{n,m}<\/code>: Nicelik belirleyiciler (Quantifiers).<\/li>\n<li><code>[]<\/code>: Karakter s\u0131n\u0131flar\u0131.<\/li>\n<li><code>|<\/code>: VEYA operat\u00f6r\u00fc (alternatif).<\/li>\n<li><code>()<\/code>: Gruplama ve yakalama.<\/li>\n<\/ul>\n<h3>Karakter S\u0131n\u0131flar\u0131 (Character Classes)<\/h3>\n<p>Karakter s\u0131n\u0131flar\u0131, bir karakter k\u00fcmesinden herhangi bir karakteri e\u015fle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. K\u00f6\u015feli parantezler <code>[]<\/code> i\u00e7ine al\u0131n\u0131rlar.<\/p>\n<ul>\n<li><code>[abc]<\/code>: &#8216;a&#8217;, &#8216;b&#8217; veya &#8216;c&#8217; karakterlerinden herhangi birini e\u015fle\u015ftirir.<\/li>\n<li><code>[^abc]<\/code>: &#8216;a&#8217;, &#8216;b&#8217; veya &#8216;c&#8217; d\u0131\u015f\u0131ndaki herhangi bir karakteri e\u015fle\u015ftirir.<\/li>\n<li><code>[a-z]<\/code>: K\u00fc\u00e7\u00fck harfli &#8216;a&#8217;dan &#8216;z&#8217;ye kadar herhangi bir karakteri e\u015fle\u015ftirir.<\/li>\n<li><code>[A-Z]<\/code>: B\u00fcy\u00fck harfli &#8216;A&#8217;dan &#8216;Z&#8217;ye kadar herhangi bir karakteri e\u015fle\u015ftirir.<\/li>\n<li><code>[0-9]<\/code>: &#8216;0&#8217;dan &#8216;9&#8217;a kadar herhangi bir rakam\u0131 e\u015fle\u015ftirir.<\/li>\n<li><code>[a-zA-Z0-9]<\/code>: Alfan\u00fcmerik karakterleri e\u015fle\u015ftirir.<\/li>\n<\/ul>\n<h3>\u00d6nceden Tan\u0131mlanm\u0131\u015f Karakter S\u0131n\u0131flar\u0131<\/h3>\n<p>Yayg\u0131n kullan\u0131lan karakter s\u0131n\u0131flar\u0131 i\u00e7in k\u0131sa yollar mevcuttur:<\/p>\n<ul>\n<li><code>\\d<\/code>: Herhangi bir rakam\u0131 e\u015fle\u015ftirir (<code>[0-9]<\/code> ile ayn\u0131).<\/li>\n<li><code>\\D<\/code>: Rakam olmayan herhangi bir karakteri e\u015fle\u015ftirir (<code>[^0-9]<\/code> ile ayn\u0131).<\/li>\n<li><code>\\s<\/code>: Herhangi bir bo\u015fluk karakterini e\u015fle\u015ftirir (bo\u015fluk, tab, yeni sat\u0131r vb.).<\/li>\n<li><code>\\S<\/code>: Bo\u015fluk olmayan herhangi bir karakteri e\u015fle\u015ftirir.<\/li>\n<li><code>\\w<\/code>: Herhangi bir kelime karakterini e\u015fle\u015ftirir (harf, rakam veya alt \u00e7izgi: <code>[a-zA-Z0-9_]<\/code>).<\/li>\n<li><code>\\W<\/code>: Kelime olmayan herhangi bir karakteri e\u015fle\u015ftirir.<\/li>\n<\/ul>\n<p>Java&#8217;da <code>\\<\/code> karakteri \u00f6zel bir anlama sahip oldu\u011fundan, d\u00fczenli ifade i\u00e7inde <code>\\<\/code> kullanmak istedi\u011fimizde bunu Java string&#8217;i i\u00e7inde <code>\\\\<\/code> olarak belirtmeliyiz. \u00d6rne\u011fin, <code>\\d<\/code> ifadesi Java&#8217;da <code>\"\\\\d\"<\/code> olarak yaz\u0131lmal\u0131d\u0131r.<\/p>\n<h2>Nicelik Belirleyiciler (Quantifiers)<\/h2>\n<p>Nicelik belirleyiciler, bir karakterin veya grubun ka\u00e7 kez tekrar edebilece\u011fini belirtir.<\/p>\n<ul>\n<li><code>X<em><\/code>: X&#8217;in s\u0131f\u0131r veya daha fazla kez tekrar\u0131. (\u00d6rn: <code>a<\/em><\/code> -> &#8220;&#8221;, &#8220;a&#8221;, &#8220;aa&#8221;, &#8220;aaa&#8221;&#8230;)<\/li>\n<li><code>X+<\/code>: X&#8217;in bir veya daha fazla kez tekrar\u0131. (\u00d6rn: <code>a+<\/code> -> &#8220;a&#8221;, &#8220;aa&#8221;, &#8220;aaa&#8221;&#8230;)<\/li>\n<li><code>X?<\/code>: X&#8217;in s\u0131f\u0131r veya bir kez tekrar\u0131 (iste\u011fe ba\u011fl\u0131). (\u00d6rn: <code>a?<\/code> -> &#8220;&#8221;, &#8220;a&#8221;)<\/li>\n<li><code>X{n}<\/code>: X&#8217;in tam olarak n kez tekrar\u0131. (\u00d6rn: <code>a{3}<\/code> -> &#8220;aaa&#8221;)<\/li>\n<li><code>X{n,}<\/code>: X&#8217;in en az n kez tekrar\u0131. (\u00d6rn: <code>a{2,}<\/code> -> &#8220;aa&#8221;, &#8220;aaa&#8221;, &#8220;aaaa&#8221;&#8230;)<\/li>\n<li><code>X{n,m}<\/code>: X&#8217;in en az n, en fazla m kez tekrar\u0131. (\u00d6rn: <code>a{2,4}<\/code> -> &#8220;aa&#8221;, &#8220;aaa&#8221;, &#8220;aaaa&#8221;)<\/li>\n<\/ul>\n<h3>Greedy, Reluctant ve Possessive Quantifiers<\/h3>\n<p>Nicelik belirleyiciler varsay\u0131lan olarak &#8220;greedy&#8221; (a\u00e7g\u00f6zl\u00fc) davran\u0131\u015f sergiler. Yani m\u00fcmk\u00fcn olan en uzun e\u015fle\u015fmeyi bulmaya \u00e7al\u0131\u015f\u0131rlar.<br \/>\n\u00d6rne\u011fin, <code><.<em>><\/code> deseni <code><b>metin<\/b><\/code> metninde <code><b>metin<\/b><\/code> ifadesinin tamam\u0131n\u0131 e\u015fle\u015ftirir, \u00e7\u00fcnk\u00fc <code>.<\/em><\/code> m\u00fcmk\u00fcn olan en fazla karakteri t\u00fcketir.<\/p>\n<ul>\n<li><strong>Greedy (A\u00e7g\u00f6zl\u00fc):<\/strong> Varsay\u0131lan davran\u0131\u015ft\u0131r. M\u00fcmk\u00fcn olan en fazla karakteri e\u015fle\u015ftirir. (<code>*<\/code>, <code>+<\/code>, <code>?<\/code>, <code>{n,m}<\/code>)<\/li>\n<li><strong>Reluctant\/Lazy (\u0130stekli olmayan\/Tembel):<\/strong> Nicelik belirleyicinin sonuna <code>?<\/code> eklenerek elde edilir. M\u00fcmk\u00fcn olan en az karakteri e\u015fle\u015ftirir. (<code>*?<\/code>, <code>+?<\/code>, <code>??<\/code>, <code>{n,m}?<\/code>)\n<p>\u00d6rn: <code><.*?><\/code> deseni <code><b>metin<\/b><\/code> metninde \u00f6nce <code><b><\/code> sonra <code><\/b><\/code> ifadelerini ayr\u0131 ayr\u0131 e\u015fle\u015ftirir.<\/p>\n<\/li>\n<li><strong>Possessive (Sahiplenici):<\/strong> Nicelik belirleyicinin sonuna <code>+<\/code> eklenerek elde edilir. M\u00fcmk\u00fcn olan en fazla karakteri e\u015fle\u015ftirir, ancak bir kez e\u015fle\u015ftikten sonra geri izleme (backtracking) yapmaz. Bu, baz\u0131 durumlarda performans\u0131 art\u0131rabilir ancak e\u015fle\u015fme bulma yetene\u011fini k\u0131s\u0131tlayabilir. (<code>*+<\/code>, <code>++<\/code>, <code>?+<\/code>, <code>{n,m}+<\/code>)<\/li>\n<\/ul>\n<h2>S\u0131n\u0131rlar (Anchors) ve Gruplar (Groups)<\/h2>\n<p>D\u00fczenli ifadeler, metin i\u00e7indeki belirli konumlara (s\u0131n\u0131rlara) veya karakter gruplar\u0131na odaklanmam\u0131z\u0131 sa\u011flayan ek \u00f6zellikler sunar.<\/p>\n<h3>S\u0131n\u0131rlar (Anchors)<\/h3>\n<p>S\u0131n\u0131rlar, e\u015fle\u015fmenin metin i\u00e7inde belirli bir konumda ger\u00e7ekle\u015fmesini sa\u011flar, ancak kendileri herhangi bir karakteri e\u015fle\u015ftirmezler.<\/p>\n<ul>\n<li><code>^<\/code>: Sat\u0131r\u0131n veya metnin ba\u015flang\u0131c\u0131n\u0131 e\u015fle\u015ftirir. (Multiline modu a\u00e7\u0131k de\u011filse metnin ba\u015flang\u0131c\u0131d\u0131r.)<\/li>\n<li><code>$<\/code>: Sat\u0131r\u0131n veya metnin sonunu e\u015fle\u015ftirir. (Multiline modu a\u00e7\u0131k de\u011filse metnin sonudur.)<\/li>\n<li><code>\\b<\/code>: Kelime s\u0131n\u0131r\u0131n\u0131 e\u015fle\u015ftirir. Bir harf, rakam veya alt \u00e7izgi karakteri ile kelime olmayan bir karakter aras\u0131ndaki ge\u00e7i\u015fi veya metnin ba\u015flang\u0131\u00e7\/sonunu belirtir.<\/li>\n<li><code>\\B<\/code>: Kelime s\u0131n\u0131r\u0131 olmayan bir konumu e\u015fle\u015ftirir. Yani, kelime karakterleri aras\u0131nda veya kelime olmayan karakterler aras\u0131nda bir konumu belirtir.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexSinirlar {\n    public static void main(String[] args) {\n        String metin = \"elma, armut, elmasuyu, elma.\";\n        Pattern pattern = Pattern.compile(\"\\\\belma\\\\b\"); \/\/ Yaln\u0131zca 'elma' kelimesini e\u015fle\u015ftir\n        Matcher matcher = pattern.matcher(metin);\n\n        while (matcher.find()) {\n            System.out.println(\"Kelime e\u015fle\u015fmesi bulundu: \" + matcher.group());\n        }\n        \/\/ \u00c7\u0131kt\u0131: Kelime e\u015fle\u015fmesi bulundu: elma\n        \/\/         Kelime e\u015fle\u015fmesi bulundu: elma\n        \/\/ \"elmasuyu\" i\u00e7indeki \"elma\" e\u015fle\u015fmez.\n    }\n}\n<\/code><\/pre>\n<h3>Gruplar (Groups) ve Geri Referanslar (Backreferences)<\/h3>\n<p>Parantezler <code>()<\/code> bir grup olu\u015fturmak i\u00e7in kullan\u0131l\u0131r. Gruplar, birden fazla karakteri tek bir birim olarak ele almam\u0131z\u0131 ve e\u015fle\u015fen alt dizeleri yakalamam\u0131z\u0131 sa\u011flar.<\/p>\n<ul>\n<li><strong>Yakalama Gruplar\u0131 (Capturing Groups):<\/strong> <code>(desen)<\/code> \u015feklinde tan\u0131mlan\u0131r. Bu gruplar, e\u015fle\u015fen alt dizeleri haf\u0131zaya al\u0131r ve daha sonra bunlara geri referanslarla veya <code>Matcher.group(int group)<\/code> metoduyla eri\u015filebilir. Gruplar soldan sa\u011fa do\u011fru 1&#8217;den ba\u015flayarak numaraland\u0131r\u0131l\u0131r. Grup 0, her zaman t\u00fcm e\u015fle\u015fmeyi temsil eder.<\/li>\n<li><strong>Yakalama Yapmayan Gruplar (Non-capturing Groups):<\/strong> <code>(?:desen)<\/code> \u015feklinde tan\u0131mlan\u0131r. Bunlar da bir grup olu\u015fturur, ancak e\u015fle\u015fen alt dizeleri haf\u0131zaya almazlar. Bu, \u00f6zellikle performans a\u00e7\u0131s\u0131ndan veya sadece gruplama amac\u0131yla kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<\/ul>\n<p>Geri referanslar, bir desen i\u00e7inde daha \u00f6nce yakalanan bir gruba referans vermek i\u00e7in kullan\u0131l\u0131r. <code>\\1<\/code>, <code>\\2<\/code> gibi ifadelerle belirtilirler.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexGruplar {\n    public static void main(String[] args) {\n        String metin = \"\u0130sim: Ali Can, Ya\u015f: 30; \u0130sim: Ay\u015fe Y\u0131lmaz, Ya\u015f: 25\";\n        \/\/ \u0130sim ve Soyisim gruplar\u0131n\u0131 yakala\n        String regex = \"\u0130sim: (\\\\w+) (\\\\w+), Ya\u015f: (\\\\d+)\";\n\n        Pattern pattern = Pattern.compile(regex);\n        Matcher matcher = pattern.matcher(metin);\n\n        while (matcher.find()) {\n            System.out.println(\"T\u00fcm e\u015fle\u015fme: \" + matcher.group(0));\n            System.out.println(\"\u0130sim: \" + matcher.group(1));\n            System.out.println(\"Soyisim: \" + matcher.group(2));\n            System.out.println(\"Ya\u015f: \" + matcher.group(3));\n            System.out.println(\"---\");\n        }\n\n        \/\/ Geri referans \u00f6rne\u011fi: Tekrar eden kelimeleri bulma\n        String tekrarEdenMetin = \"Bu bir test test c\u00fcmlesidir.\";\n        Pattern tekrarPattern = Pattern.compile(\"\\\\b(\\\\w+)\\\\s+\\\\1\\\\b\"); \/\/ Ayn\u0131 kelimenin tekrar\u0131\n        Matcher tekrarMatcher = tekrarPattern.matcher(tekrarEdenMetin);\n\n        while (tekrarMatcher.find()) {\n            System.out.println(\"Tekrar eden kelime grubu bulundu: \" + tekrarMatcher.group());\n            System.out.println(\"Tekrar eden kelime: \" + tekrarMatcher.group(1));\n        }\n    }\n}\n<\/code><\/pre>\n<h2>Java&#8217;da <code>Pattern<\/code> S\u0131n\u0131f\u0131 Detaylar\u0131<\/h2>\n<p><code>Pattern<\/code> s\u0131n\u0131f\u0131 sadece deseni derlemekle kalmaz, ayn\u0131 zamanda desenin davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftiren bayraklar (flags) ve baz\u0131 kullan\u0131\u015fl\u0131 yard\u0131mc\u0131 metotlar sunar.<\/p>\n<h3><code>Pattern.compile()<\/code> ve Bayraklar (Flags)<\/h3>\n<p><code>Pattern.compile()<\/code> metodunun ikinci bir parametresi vard\u0131r: <code>flags<\/code>. Bu bayraklar, e\u015fle\u015ftirme i\u015fleminin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 kontrol eder.<\/p>\n<ul>\n<li><code>Pattern.CASE_INSENSITIVE<\/code> (veya <code>Pattern.I<\/code>): B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z e\u015fle\u015ftirme yapar.<\/li>\n<li><code>Pattern.MULTILINE<\/code> (veya <code>Pattern.M<\/code>): <code>^<\/code> ve <code>$<\/code> metnin tamam\u0131 yerine her sat\u0131r\u0131n ba\u015flang\u0131c\u0131 ve sonuyla e\u015fle\u015fmesini sa\u011flar.<\/li>\n<li><code>Pattern.DOTALL<\/code> (veya <code>Pattern.S<\/code>): <code>.<\/code> meta karakterinin yeni sat\u0131r karakteri (<code>\\n<\/code>) dahil t\u00fcm karakterleri e\u015fle\u015ftirmesini sa\u011flar.<\/li>\n<li><code>Pattern.UNICODE_CASE<\/code> (veya <code>Pattern.U<\/code>): Unicode karakterler i\u00e7in b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z e\u015fle\u015ftirmeyi etkinle\u015ftirir.<\/li>\n<li><code>Pattern.COMMENTS<\/code> (veya <code>Pattern.X<\/code>): Desende bo\u015fluk karakterlerini ve <code>#<\/code> ile ba\u015flayan yorumlar\u0131 g\u00f6z ard\u0131 eder. Bu, karma\u015f\u0131k desenleri daha okunabilir hale getirmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\nimport java.util.regex.Matcher;\n\npublic class PatternFlags {\n    public static void main(String[] args) {\n        String metin = \"java\\nJava\\nJAVA\";\n        String regex = \"java\";\n\n        \/\/ B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z e\u015fle\u015ftirme\n        Pattern patternInsensitive = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);\n        Matcher matcherInsensitive = patternInsensitive.matcher(metin);\n        System.out.println(\"B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z e\u015fle\u015fmeler:\");\n        while (matcherInsensitive.find()) {\n            System.out.println(\"Bulundu: \" + matcherInsensitive.group());\n        }\n\n        System.out.println(\"\\nMultiline ve Dotall \u00f6rne\u011fi:\");\n        String cokSatirliMetin = \"\u0130lk sat\u0131r\\n\u0130kinci sat\u0131r\";\n        \/\/ ^ ve $ her sat\u0131r\u0131n ba\u015f\u0131nda\/sonunda e\u015fle\u015fsin\n        Pattern multiLinePattern = Pattern.compile(\"^\u0130k\", Pattern.MULTILINE);\n        Matcher multiLineMatcher = multiLinePattern.matcher(cokSatirliMetin);\n        System.out.println(\"Multiline e\u015fle\u015fmeler:\");\n        while (multiLineMatcher.find()) {\n            System.out.println(\"Bulundu (Multiline): \" + multiLineMatcher.group());\n        }\n\n        \/\/ . yeni sat\u0131r karakterini de e\u015fle\u015fsin\n        Pattern dotAllPattern = Pattern.compile(\"sat\u0131r.\u0130k\", Pattern.DOTALL);\n        Matcher dotAllMatcher = dotAllPattern.matcher(cokSatirliMetin);\n        System.out.println(\"Dotall e\u015fle\u015fmeleri:\");\n        while (dotAllMatcher.find()) {\n            System.out.println(\"Bulundu (Dotall): \" + dotAllMatcher.group());\n        }\n    }\n}\n<\/code><\/pre>\n<h3><code>Pattern.matches()<\/code> ve <code>Pattern.split()<\/code> Metotlar\u0131<\/h3>\n<ul>\n<li><code>Pattern.matches(String regex, CharSequence input)<\/code>: Bu statik metot, t\u00fcm giri\u015f metninin belirli bir desenle tam olarak e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol etmek i\u00e7in h\u0131zl\u0131 bir yoldur. Tek seferlik, tam e\u015fle\u015fme kontrol\u00fc i\u00e7in idealdir. <code>Pattern<\/code> nesnesi olu\u015fturmaya gerek kalmaz.<\/li>\n<li><code>Pattern.split(CharSequence input)<\/code>: Bir giri\u015f metnini, desene g\u00f6re ay\u0131r\u0131r ve bir <code>String<\/code> dizisi d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>Pattern.split(CharSequence input, int limit)<\/code>: Ayn\u0131 i\u015flevi g\u00f6r\u00fcr, ancak d\u00f6nd\u00fcr\u00fclecek dizinin maksimum boyutunu belirten bir <code>limit<\/code> parametresi al\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\nimport java.util.Arrays;\n\npublic class PatternYardimciMetotlar {\n    public static void main(String[] args) {\n        \/\/ Pattern.matches() \u00f6rne\u011fi\n        String email = \"test@example.com\";\n        String invalidEmail = \"test@example\";\n        String emailRegex = \"\\\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}\\\\b\";\n\n        System.out.println(\"'\" + email + \"' ge\u00e7erli mi? \" + Pattern.matches(emailRegex, email));\n        System.out.println(\"'\" + invalidEmail + \"' ge\u00e7erli mi? \" + Pattern.matches(emailRegex, invalidEmail));\n\n        \/\/ Pattern.split() \u00f6rne\u011fi\n        String cumle = \"Bu bir, \u00f6rnek, c\u00fcmle, metin.\";\n        Pattern virgulleAyirici = Pattern.compile(\",\\\\s*\"); \/\/ Virg\u00fcl ve ard\u0131ndan gelen bo\u015fluklar\u0131 ay\u0131r\u0131c\u0131 olarak kullan\n        String[] kelimeler = virgulleAyirici.split(cumle);\n        System.out.println(\"\\nAy\u0131rma i\u015flemi: \" + Arrays.toString(kelimeler));\n\n        String cumleLimit = \"bir,iki,\u00fc\u00e7,d\u00f6rt,be\u015f\";\n        String[] sinirliKelimeler = virgulleAyirici.split(cumleLimit, 3); \/\/ En fazla 3 par\u00e7a\n        System.out.println(\"S\u0131n\u0131rl\u0131 ay\u0131rma i\u015flemi: \" + Arrays.toString(sinirliKelimeler));\n    }\n}\n<\/code><\/pre>\n<h2>Java&#8217;da <code>Matcher<\/code> S\u0131n\u0131f\u0131 Detaylar\u0131<\/h2>\n<p><code>Matcher<\/code> s\u0131n\u0131f\u0131, e\u015fle\u015ftirme sonu\u00e7lar\u0131n\u0131 y\u00f6netmek ve metin \u00fczerinde daha karma\u015f\u0131k i\u015flemler yapmak i\u00e7in \u00e7e\u015fitli metotlar sunar.<\/p>\n<h3>E\u015fle\u015fme Metotlar\u0131: <code>find()<\/code>, <code>matches()<\/code>, <code>lookingAt()<\/code><\/h3>\n<ul>\n<li><code>boolean find()<\/code>: Giri\u015f dizisinde desenin bir sonraki e\u015fle\u015fmesini bulmaya \u00e7al\u0131\u015f\u0131r. Birden fazla e\u015fle\u015fmeyi bulmak i\u00e7in bir d\u00f6ng\u00fc i\u00e7inde kullan\u0131l\u0131r.<\/li>\n<li><code>boolean matches()<\/code>: Giri\u015f dizisinin tamam\u0131n\u0131n desenle e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol eder. E\u011fer giri\u015fin sadece bir k\u0131sm\u0131 e\u015fle\u015fiyorsa <code>false<\/code> d\u00f6ner.<\/li>\n<li><code>boolean lookingAt()<\/code>: Giri\u015f dizisinin ba\u015flang\u0131c\u0131n\u0131n desenle e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol eder. Giri\u015fin tamam\u0131n\u0131n e\u015fle\u015fmesi gerekmez, sadece ba\u015flang\u0131c\u0131n\u0131n e\u015fle\u015fmesi yeterlidir.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class MatcherMetotlari {\n    public static void main(String[] args) {\n        String metin = \"Merhaba d\u00fcnya! Java programlama.\";\n        Pattern pattern = Pattern.compile(\"Java\");\n        Matcher matcher = pattern.matcher(metin);\n\n        \/\/ find() \u00f6rne\u011fi\n        System.out.println(\"find() ile e\u015fle\u015fme: \" + matcher.find()); \/\/ true\n        System.out.println(\"Bulunan: \" + matcher.group()); \/\/ Java\n\n        \/\/ matches() \u00f6rne\u011fi (yeni bir matcher nesnesi olu\u015fturulmal\u0131 veya resetlenmeli)\n        Matcher matcher2 = pattern.matcher(\"Java\");\n        System.out.println(\"matches() ile tam e\u015fle\u015fme: \" + matcher2.matches()); \/\/ true\n\n        Matcher matcher3 = pattern.matcher(\"Java programlama\");\n        System.out.println(\"matches() ile tam e\u015fle\u015fme (k\u0131smi metin): \" + matcher3.matches()); \/\/ false (t\u00fcm metin de\u011fil)\n\n        \/\/ lookingAt() \u00f6rne\u011fi\n        Matcher matcher4 = pattern.matcher(\"Java programlama\");\n        System.out.println(\"lookingAt() ile ba\u015flang\u0131\u00e7 e\u015fle\u015fmesi: \" + matcher4.lookingAt()); \/\/ true\n\n        Matcher matcher5 = pattern.matcher(\"Merhaba Java\");\n        System.out.println(\"lookingAt() ile ba\u015flang\u0131\u00e7 e\u015fle\u015fmesi (ba\u015fka bir yerden): \" + matcher5.lookingAt()); \/\/ false\n    }\n}\n<\/code><\/pre>\n<h3>E\u015fle\u015fme Bilgileri: <code>group()<\/code>, <code>start()<\/code>, <code>end()<\/code><\/h3>\n<p>Bir e\u015fle\u015fme bulunduktan sonra, <code>Matcher<\/code> nesnesi e\u015fle\u015fme hakk\u0131nda detayl\u0131 bilgi sa\u011flar:<\/p>\n<ul>\n<li><code>String group()<\/code>: En son bulunan e\u015fle\u015fen alt dizenin tamam\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. (group(0) ile ayn\u0131).<\/li>\n<li><code>String group(int group)<\/code>: Belirtilen yakalama grubunun e\u015fle\u015fen alt dizesini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>int start()<\/code>: En son bulunan e\u015fle\u015fmenin ba\u015flang\u0131\u00e7 indeksini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>int end()<\/code>: En son bulunan e\u015fle\u015fmenin biti\u015f indeksinden bir fazlas\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>int start(int group)<\/code>: Belirtilen yakalama grubunun ba\u015flang\u0131\u00e7 indeksini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>int end(int group)<\/code>: Belirtilen yakalama grubunun biti\u015f indeksinden bir fazlas\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<\/li>\n<\/ul>\n<h3>De\u011fi\u015ftirme Metotlar\u0131: <code>replaceAll()<\/code>, <code>replaceFirst()<\/code><\/h3>\n<p><code>Matcher<\/code> s\u0131n\u0131f\u0131, metin i\u00e7indeki e\u015fle\u015fmeleri ba\u015fka bir metinle de\u011fi\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc metotlar sunar.<\/p>\n<ul>\n<li><code>String replaceAll(String replacement)<\/code>: Giri\u015f dizisindeki desenle e\u015fle\u015fen t\u00fcm alt dizeleri belirtilen <code>replacement<\/code> string&#8217;i ile de\u011fi\u015ftirir.<\/li>\n<li><code>String replaceFirst(String replacement)<\/code>: Giri\u015f dizisindeki desenle e\u015fle\u015fen ilk alt dizeyi belirtilen <code>replacement<\/code> string&#8217;i ile de\u011fi\u015ftirir.<\/li>\n<\/ul>\n<p><code>replacement<\/code> string&#8217;i i\u00e7inde <code>$1<\/code>, <code>$2<\/code> gibi ifadeler kullanarak yakalama gruplar\u0131na referans verebilirsiniz.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexDegistirme {\n    public static void main(String[] args) {\n        String metin = \"Merhaba d\u00fcnya! Java programlama \u00e7ok g\u00fczel. Java her yerde.\";\n        Pattern pattern = Pattern.compile(\"Java\");\n\n        \/\/ replaceFirst() \u00f6rne\u011fi\n        Matcher matcherFirst = pattern.matcher(metin);\n        String ilkDegisim = matcherFirst.replaceFirst(\"Python\");\n        System.out.println(\"\u0130lk de\u011fi\u015fim: \" + ilkDegisim); \/\/ Merhaba d\u00fcnya! Python programlama \u00e7ok g\u00fczel. Java her yerde.\n\n        \/\/ replaceAll() \u00f6rne\u011fi\n        Matcher matcherAll = pattern.matcher(metin);\n        String tumDegisim = matcherAll.replaceAll(\"C#\");\n        System.out.println(\"T\u00fcm de\u011fi\u015fim: \" + tumDegisim); \/\/ Merhaba d\u00fcnya! C# programlama \u00e7ok g\u00fczel. C# her yerde.\n\n        \/\/ Yakalama gruplar\u0131 ile de\u011fi\u015ftirme\n        String isimSoyisim = \"Ad\u0131: Ali, Soyad\u0131: Can\";\n        Pattern adSoyadPattern = Pattern.compile(\"Ad\u0131: (\\\\w+), Soyad\u0131: (\\\\w+)\");\n        Matcher adSoyadMatcher = adSoyadPattern.matcher(isimSoyisim);\n        String formatliIsim = adSoyadMatcher.replaceAll(\"Tam Ad\u0131: $1 $2\");\n        System.out.println(\"Formatl\u0131 isim: \" + formatliIsim); \/\/ Tam Ad\u0131: Ali Can\n    }\n}\n<\/code><\/pre>\n<h2>Pratik Java Regex \u00d6rnekleri<\/h2>\n<p>\u015eimdiye kadar \u00f6\u011frendiklerimizi peki\u015ftirmek i\u00e7in baz\u0131 yayg\u0131n kullan\u0131m senaryolar\u0131na y\u00f6nelik pratik \u00f6rneklere g\u00f6z atal\u0131m.<\/p>\n<h3>E-posta Do\u011frulama<\/h3>\n<p>E-posta adreslerinin belirli bir formata uyup uymad\u0131\u011f\u0131n\u0131 kontrol etmek, en yayg\u0131n Regex kullan\u0131m alanlar\u0131ndan biridir. Unutulmamal\u0131d\u0131r ki, bir e-posta adresini m\u00fckemmel bir \u015fekilde do\u011frulayan tek bir regex deseni yoktur ve bu desenler olduk\u00e7a karma\u015f\u0131k olabilir. A\u015fa\u011f\u0131daki \u00f6rnek, \u00e7o\u011fu standart e-posta format\u0131 i\u00e7in yeterli olacakt\u0131r.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\n\npublic class EmailDogrulama {\n    private static final String EMAIL_REGEX =\n            \"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,6}$\"; \/\/ Daha basit ve yayg\u0131n bir regex\n\n    public static boolean isValidEmail(String email) {\n        return Pattern.matches(EMAIL_REGEX, email);\n    }\n\n    public static void main(String[] args) {\n        System.out.println(\"test@example.com ge\u00e7erli mi? \" + isValidEmail(\"test@example.com\")); \/\/ true\n        System.out.println(\"user.name+tag@sub.domain.co.uk ge\u00e7erli mi? \" + isValidEmail(\"user.name+tag@sub.domain.co.uk\")); \/\/ true\n        System.out.println(\"invalid-email ge\u00e7erli mi? \" + isValidEmail(\"invalid-email\")); \/\/ false\n        System.out.println(\"test@.com ge\u00e7erli mi? \" + isValidEmail(\"test@.com\")); \/\/ false\n        System.out.println(\"test@example ge\u00e7erli mi? \" + isValidEmail(\"test@example\")); \/\/ false\n    }\n}\n<\/code><\/pre>\n<h3>Telefon Numaras\u0131 Do\u011frulama (\u00d6rn: T\u00fcrkiye i\u00e7in)<\/h3>\n<p>T\u00fcrkiye&#8217;deki telefon numaralar\u0131 genellikle 0 (5xx) xxx xx xx veya +90 (5xx) xxx xx xx format\u0131ndad\u0131r. Basit bir do\u011frulama deseni yazal\u0131m.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\n\npublic class TelefonDogrulama {\n    \/\/ 0 (5xx) xxx xx xx veya +90 (5xx) xxx xx xx format\u0131\n    private static final String TELEFON_REGEX =\n            \"^(0|\\\\+90)\\\\s<em>\\\\(?\\\\d{3}\\\\)?\\\\s<\/em>\\\\d{3}\\\\s<em>\\\\d{2}\\\\s<\/em>\\\\d{2}$\";\n\n    public static boolean isValidPhoneNumber(String phoneNumber) {\n        return Pattern.matches(TELEFON_REGEX, phoneNumber);\n    }\n\n    public static void main(String[] args) {\n        System.out.println(\"0 (532) 123 45 67 ge\u00e7erli mi? \" + isValidPhoneNumber(\"0 (532) 123 45 67\")); \/\/ true\n        System.out.println(\"+905321234567 ge\u00e7erli mi? \" + isValidPhoneNumber(\"+905321234567\")); \/\/ true\n        System.out.println(\"05321234567 ge\u00e7erli mi? \" + isValidPhoneNumber(\"05321234567\")); \/\/ true\n        System.out.println(\"1234567 ge\u00e7erli mi? \" + isValidPhoneNumber(\"1234567\")); \/\/ false\n        System.out.println(\"+90 (532) 123-45-67 ge\u00e7erli mi? \" + isValidPhoneNumber(\"+90 (532) 123-45-67\")); \/\/ false (tire yok)\n    }\n}\n<\/code><\/pre>\n<h3>URL Do\u011frulama<\/h3>\n<p>URL&#8217;ler de karma\u015f\u0131k bir yap\u0131ya sahiptir. \u0130\u015fte basit bir URL do\u011frulama \u00f6rne\u011fi.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\n\npublic class URLDogrulama {\n    private static final String URL_REGEX =\n            \"^(https?|ftp):\/\/[^\\\\s\/$.?#].[^\\\\s]*$\";\n\n    public static boolean isValidURL(String url) {\n        return Pattern.matches(URL_REGEX, url);\n    }\n\n    public static void main(String[] args) {\n        System.out.println(\"https:\/\/www.google.com ge\u00e7erli mi? \" + isValidURL(\"https:\/\/www.google.com\")); \/\/ true\n        System.out.println(\"http:\/\/example.org\/path\/to\/page?query=string ge\u00e7erli mi? \" + isValidURL(\"http:\/\/example.org\/path\/to\/page?query=string\")); \/\/ true\n        System.out.println(\"ftp:\/\/ftp.test.net\/file.zip ge\u00e7erli mi? \" + isValidURL(\"ftp:\/\/ftp.test.net\/file.zip\")); \/\/ true\n        System.out.println(\"www.invalid.com ge\u00e7erli mi? \" + isValidURL(\"www.invalid.com\")); \/\/ false (protokol yok)\n        System.out.println(\"invalid url ge\u00e7erli mi? \" + isValidURL(\"invalid url\")); \/\/ false\n    }\n}\n<\/code><\/pre>\n<h3>Metinden Say\u0131lar\u0131 Ay\u0131klama<\/h3>\n<p>Bir metin i\u00e7indeki t\u00fcm say\u0131sal de\u011ferleri bulmak ve ay\u0131klamak.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class SayiAyiklama {\n    public static void main(String[] args) {\n        String metin = \"\u00dcr\u00fcn fiyat\u0131 125.50 TL. Stokta 300 adet var. \u0130ndirim oran\u0131 %10.\";\n        Pattern pattern = Pattern.compile(\"\\\\d+(\\\\.\\\\d+)?\"); \/\/ Tam say\u0131 veya ondal\u0131kl\u0131 say\u0131lar\u0131 e\u015fle\u015ftir\n        Matcher matcher = pattern.matcher(metin);\n\n        System.out.println(\"Metinden ay\u0131klanan say\u0131lar:\");\n        while (matcher.find()) {\n            System.out.println(matcher.group());\n        }\n    }\n}\n<\/code><\/pre>\n<h3>HTML Etiketlerini Temizleme (Basit)<\/h3>\n<p>Basit HTML etiketlerini bir metinden kald\u0131rmak i\u00e7in bir regex kullanabiliriz. Ancak unutulmamal\u0131d\u0131r ki, karma\u015f\u0131k HTML ayr\u0131\u015ft\u0131rma i\u015flemleri i\u00e7in DOM ayr\u0131\u015ft\u0131r\u0131c\u0131lar\u0131 (JSoup gibi) kullanmak daha g\u00fcvenli ve sa\u011flamd\u0131r.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.regex.Pattern;\n\npublic class HTMLTemizleme {\n    public static void main(String[] args) {\n        String htmlMetin = \"<p>Bu bir <b>\u00f6rnek<\/b> HTML metnidir.<\/p>\";\n        \/\/ <tag> veya <\/tag> format\u0131ndaki etiketleri e\u015fle\u015ftir\n        Pattern pattern = Pattern.compile(\"<[^>]+>\");\n        String temizMetin = pattern.matcher(htmlMetin).replaceAll(\"\");\n        System.out.println(\"Orijinal HTML: \" + htmlMetin);\n        System.out.println(\"Temizlenmi\u015f Metin: \" + temizMetin);\n    }\n}\n<\/code><\/pre>\n<h2>Performans ve Dikkat Edilmesi Gerekenler<\/h2>\n<p>D\u00fczenli ifadeler g\u00fc\u00e7l\u00fcd\u00fcr, ancak yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda performans sorunlar\u0131na veya beklenmedik davran\u0131\u015flara yol a\u00e7abilir.<\/p>\n<h3><code>Pattern.compile()<\/code>&#8216;\u0131 D\u00f6ng\u00fc D\u0131\u015f\u0131nda Kullan\u0131n<\/h3>\n<p>Bir <code>Pattern<\/code> nesnesini derlemek maliyetli bir i\u015flemdir. E\u011fer ayn\u0131 deseni birden fazla kez kullanacaksan\u0131z, deseni bir kez derleyip <code>Pattern<\/code> nesnesini yeniden kullanmal\u0131s\u0131n\u0131z. \u00d6zellikle d\u00f6ng\u00fc i\u00e7inde <code>Pattern.compile()<\/code> \u00e7a\u011f\u0131rmaktan ka\u00e7\u0131n\u0131n.<\/p>\n<pre><code class=\"language-java\">\n\/\/ K\u00d6T\u00dc \u00d6RNEK: Her d\u00f6ng\u00fcde derleme\nfor (String metin : metinListesi) {\n    Pattern pattern = Pattern.compile(\"\\\\d+\"); \/\/ Her seferinde derlenir\n    Matcher matcher = pattern.matcher(metin);\n    \/\/ ...\n}\n\n\/\/ \u0130Y\u0130 \u00d6RNEK: Bir kez derleme\nPattern pattern = Pattern.compile(\"\\\\d+\"); \/\/ Sadece bir kez derlenir\nfor (String metin : metinListesi) {\n    Matcher matcher = pattern.matcher(metin);\n    \/\/ ...\n}\n<\/code><\/pre>\n<h3>A\u015f\u0131r\u0131 Geri \u0130zleme (Catastrophic Backtracking)<\/h3>\n<p>Baz\u0131 d\u00fczenli ifadeler, belirli giri\u015flerle kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda \u00e7ok fazla geri izleme (backtracking) yaparak performans sorunlar\u0131na yol a\u00e7abilir. Bu durum, \u00f6zellikle i\u00e7 i\u00e7e nicelik belirleyicilerle (<code>(a+)<em><\/code>) veya a\u015f\u0131r\u0131 esnek e\u015fle\u015fmelerle (<code>.<\/em><\/code>) ortaya \u00e7\u0131kar. Bu, program\u0131n tak\u0131lmas\u0131na veya \u00e7ok uzun s\u00fcrmesine neden olabilir (ReDoS &#8211; Regular Expression Denial of Service).<br \/>\nBunu \u00f6nlemek i\u00e7in:<\/p>\n<ul>\n<li>M\u00fcmk\u00fcn oldu\u011funca spesifik desenler kullan\u0131n.<\/li>\n<li>A\u00e7g\u00f6zl\u00fc (greedy) nicelik belirleyiciler yerine isteksiz (reluctant\/lazy) veya sahiplenici (possessive) nicelik belirleyicileri deneyin.<\/li>\n<li>\u0130\u00e7 i\u00e7e <code>*<\/code> veya <code>+<\/code> kullan\u0131m\u0131ndan ka\u00e7\u0131n\u0131n.<\/li>\n<\/ul>\n<p>\u00d6rnek: <code>(a+)+<\/code> deseni <code>aaaaaaaaaaaaaaaaaaaaaaaaaab<\/code> gibi bir metinde \u00e7ok fazla geri izleme yapabilir.<\/p>\n<h3>Karma\u015f\u0131k Desenlerin Okunabilirli\u011fi<\/h3>\n<p>D\u00fczenli ifadeler, \u00f6zellikle karma\u015f\u0131k hale geldiklerinde okunmas\u0131 ve bak\u0131m\u0131 zor olabilir. <code>Pattern.COMMENTS<\/code> bayra\u011f\u0131n\u0131 kullanarak desenlerinizi yorumlarla daha okunabilir hale getirebilirsiniz.<\/p>\n<pre><code class=\"language-java\">\n\/\/ Yorumlu regex \u00f6rne\u011fi (Pattern.COMMENTS ile)\nString complexRegex = \"(?x)\" + \/\/ COMMENTS bayra\u011f\u0131n\u0131 etkinle\u015ftir\n                      \"^\" +    \/\/ Sat\u0131r\u0131n ba\u015flang\u0131c\u0131\n                      \"(\\\\d{3})\" + \/\/ 3 haneli alan kodu (Grup 1)\n                      \"\\\\s*\" +   \/\/ S\u0131f\u0131r veya daha fazla bo\u015fluk\n                      \"(\\\\d{3})\" + \/\/ 3 haneli ilk k\u0131s\u0131m (Grup 2)\n                      \"[- .]?\" + \/\/ Opsiyonel ay\u0131r\u0131c\u0131 (tire, bo\u015fluk veya nokta)\n                      \"(\\\\d{4})\" + \/\/ 4 haneli son k\u0131s\u0131m (Grup 3)\n                      \"$\";     \/\/ Sat\u0131r\u0131n sonu\nPattern pattern = Pattern.compile(complexRegex, Pattern.COMMENTS);\n<\/code><\/pre>\n<h3>G\u00fcvenlik: Kullan\u0131c\u0131 Girdisiyle Regex Olu\u015fturma<\/h3>\n<p>Kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan girdiyi do\u011frudan bir d\u00fczenli ifade deseni olarak kullanmak g\u00fcvenlik riski olu\u015fturabilir. K\u00f6t\u00fc niyetli bir kullan\u0131c\u0131, program\u0131n\u0131z\u0131 DoS sald\u0131r\u0131lar\u0131na a\u00e7\u0131k hale getirebilecek a\u015f\u0131r\u0131 geri izleme desenleri enjekte edebilir. M\u00fcmk\u00fcnse, kullan\u0131c\u0131 girdisini do\u011frudan desen olarak kullanmaktan ka\u00e7\u0131n\u0131n veya girdiyi dikkatlice temizleyin\/do\u011frulay\u0131n.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Java&#8217;daki d\u00fczenli ifadeler, metin i\u015fleme g\u00f6revleri i\u00e7in inan\u0131lmaz derecede g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7t\u0131r. <code>java.util.regex<\/code> paketindeki <code>Pattern<\/code> ve <code>Matcher<\/code> s\u0131n\u0131flar\u0131, desenleri derlemek, metinlerde e\u015fle\u015fmeleri bulmak, yakalama gruplar\u0131na eri\u015fmek ve metinleri de\u011fi\u015ftirmek i\u00e7in kapsaml\u0131 bir API sunar. Temel s\u00f6zdiziminden (meta karakterler, nicelik belirleyiciler, karakter s\u0131n\u0131flar\u0131) ileri seviye \u00f6zelliklere (gruplar, s\u0131n\u0131rlar, bayraklar) kadar geni\u015f bir yelpazeyi kapsayan d\u00fczenli ifadeler, veri do\u011frulama, ayr\u0131\u015ft\u0131rma ve metin manip\u00fclasyonu gibi bir\u00e7ok senaryoda geli\u015ftiricilerin vazge\u00e7ilmez yard\u0131mc\u0131s\u0131d\u0131r.<\/p>\n<p>Ancak, bu g\u00fcc\u00fc kullan\u0131rken performans etkilerini, \u00f6zellikle a\u015f\u0131r\u0131 geri izleme riskini g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir. D\u00fczenli ifadeleri etkin bir \u015fekilde kullanmak, pratik ve deneyim gerektirir. Bu makaledeki \u00f6rnekler ve a\u00e7\u0131klamalar, Java&#8217;da d\u00fczenli ifadelerle \u00e7al\u0131\u015fmaya ba\u015flaman\u0131z i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r. Regex d\u00fcnyas\u0131na dald\u0131k\u00e7a, metin i\u015fleme yeteneklerinizin ne kadar artt\u0131\u011f\u0131n\u0131 g\u00f6receksiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler\nYaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde metin i\u015fleme, do\u011frulama ve ayr\u0131\u015ft\u0131rm","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-39095","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java&#039;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java&#039;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler\" \/>\n<meta property=\"og:description\" content=\"Java&#039;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde metin i\u015fleme, do\u011frulama ve ayr\u0131\u015ft\u0131rm\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-14T08:40:54+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler\",\"datePublished\":\"2026-02-14T08:40:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\"},\"wordCount\":2825,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\",\"name\":\"Java'da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-14T08:40:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java'da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/","og_locale":"tr_TR","og_type":"article","og_title":"Java'da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler","og_description":"Java'da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde metin i\u015fleme, do\u011frulama ve ayr\u0131\u015ft\u0131rm","og_url":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-14T08:40:54+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler","datePublished":"2026-02-14T08:40:54+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/"},"wordCount":2825,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/","url":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/","name":"Java'da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-14T08:40:54+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javada-duzenli-ifadeler-regex-kapsamli-bir-rehber-ve-ornekler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java&#8217;da D\u00fczenli \u0130fadeler (Regex): Kapsaml\u0131 Bir Rehber ve \u00d6rnekler"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39095","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39095"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39095\/revisions"}],"predecessor-version":[{"id":39096,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39095\/revisions\/39096"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39095"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39095"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39095"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}