Regex Test Aracı

Düzenli ifadeleri bir metin üzerinde test edin ve tüm eşleşmeleri vurgulu görün

Örnek dene

Desen

//g

Test metni

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

Düzenli İfade (Regex) Nedir?

Düzenli ifade (regex veya regexp), bir arama deseni tanımlayan karakter dizisidir. Regex test araçları, bir desen yazmanıza, bunu örnek metin üzerinde çalıştırmanıza ve tüm eşleşmeleri gerçek zamanlı olarak vurgulu görmenize olanak tanır. Bu kavram, matematikçi Stephen Kleene'nin 1950'lerdeki düzenli diller üzerine yaptığı çalışmaya dayanır; Ken Thompson ise 1968'de ilk regex motorunu QED metin düzenleyicisine yerleştirdi.

Bir regex motoru, deseni soldan sağa okuyarak eşleştirme yapmaya çalışırken girdi karakterlerini tüketir. Kısmi bir eşleşme başarısız olduğunda geri izleme (backtracking) kullanır: motor geri adım atar ve desen üzerindeki alternatif yolları dener. Go'da kullanılan RE2 gibi bazı motorlar, desenleri deterministik sonlu otomatalara (DFA) dönüştürerek geri izlemeden tamamen kaçınır; bu sayede doğrusal zamanlı eşleşme garantisi sağlar, ancak geri referanslar gibi özellikler desteklenmez.

Regex sözdizimi gevşek biçimde standartlaştırılmıştır. PCRE (Perl Compatible Regular Expressions), PHP, Python'ın re modülü ve JavaScript tarafından küçük farklılıklarla desteklenen en yaygın türdür. POSIX, grep ve sed tarafından kullanılan daha sınırlı bir sözdizimi tanımlar. Desenler diller arasında taşınırken bu farklılıklar önem kazanır: JavaScript'te çalışan bir lookahead, Go'nun RE2 motorunda hiç derlenemeyebilir.

Neden Çevrimiçi Regex Test Aracı Kullanılmalı?

Regex'i bir kod dosyasına yazmak, her desen değişikliğinde kaydetmeyi, çalıştırmayı ve çıktıyı incelemeyi gerektirir. Tarayıcı tabanlı bir regex test aracı bu geri bildirim döngüsünü sıfıra indirir: yazarsınız, eşleşmeleri görürsünüz.

Gerçek Zamanlı Eşleşme Vurgulama
Her tuş vuruşu, eşleşme sonuçlarını anında günceller. Metnin hangi bölümlerinin eşleştiğini, hangi yakalama gruplarının dolu olduğunu ve her eşleşmenin tam olarak nerede başlayıp bittiğini görürsünüz. Derleme-çalıştırma-hata ayıklama döngüsü yoktur.
🔒
Gizlilik Öncelikli İşleme
Desen eşleştirme, JavaScript RegExp motoru kullanılarak tarayıcınızda çalışır. Metin veya desenler sunucuya gönderilmez. Bu durum, hassas bilgiler içeren log dosyaları, müşteri verileri veya API yanıtları üzerinde test yaparken özellikle önemlidir.
🔍
Görsel Eşleşme İncelemesi
Eşleşmeler, konumları ve yakalama grubu değerleriyle birlikte satır içinde vurgulanır. Eşleşmeleri görsel olarak görmek, niceleyicilerdeki bir sapma hatalarını veya eksik çıpaları fark etmeyi kolaylaştırır.
🌐
Giriş veya Kurulum Gerektirmez
Modern tarayıcısı olan her cihazda çalışır. Hesap, eklenti veya IDE eklentisi gerekmez. Sayfayı açın, deseninizi ve metninizi yapıştırın ve teste başlayın.

Regex Test Aracı Kullanım Alanları

Frontend Giriş Doğrulaması
E-posta, telefon numarası veya kredi kartı alanları için desenleri HTML5 pattern nitelikleri veya JavaScript doğrulama mantığına yerleştirmeden önce oluşturun ve doğrulayın.
Backend Log Ayrıştırma
Uygulama log dosyalarından zaman damgaları, hata kodları veya IP adresleri çıkaran regex desenleri yazın. Desenin doğru grupları yakaladığını onaylamak için gerçek log örnekleri üzerinde test edin.
DevOps ve Altyapı
Nginx location bloklarında, Apache yeniden yazma kurallarında veya Prometheus uyarı kurallarında kullanılan regex'in hatalarını ayıklayın. Sunucu yapılandırmasındaki yanlış bir desen, yönlendirmeyi bozabilir veya uyarıların tamamen gözden kaçmasına neden olabilir.
QA ve Test Otomasyonu
Uçtan uca test doğrulamalarında yanıt gövdelerinin veya HTML çıktısının beklenen desenlere uygun olduğunu doğrulayın. Regex'i test paketinize eklemeden önce burada ön testini yapın.
Veri Çıkarma Süreçleri
Yapılandırılmamış metinden yapılandırılmış alanlar çıkarmak için desenlerin prototipini oluşturun: ürün fiyatı kazıma, CSV kenar durumlarını ayrıştırma veya e-posta başlıklarından üst veri çekme.
Düzenli İfadeleri Öğrenme
Metakarakterler, niceleyiciler ve gruplarla örnek dizeler üzerinde denemeler yapın. Anlık görsel geri bildirim, regex sözdizimini yalnızca belge okumaktan çok daha kolay öğrenir hale getirir.

Regex Sözdizimi Hızlı Başvurusu

Aşağıdaki tablo en sık kullanılan regex belirteçlerini kapsar. Bunlar JavaScript, Python, Go, PHP ve PCRE uyumlu çoğu motorda çalışır. Dile özgü uzantılar (Python'ın koşullu desenleri veya JavaScript'in \k sözdizimli adlandırılmış grupları gibi) kod örnekleri bölümünde belirtilmiştir.

DesenAdAçıklama
.Any characterMatches any single character except newline (unless s flag is set)
\dDigitMatches [0-9]
\wWord characterMatches [a-zA-Z0-9_]
\sWhitespaceMatches space, tab, newline, carriage return, form feed
\bWord boundaryMatches the position between a word character and a non-word character
^Start of string/lineMatches the start of the input; with m flag, matches start of each line
$End of string/lineMatches the end of the input; with m flag, matches end of each line
*Zero or moreMatches the preceding token 0 or more times (greedy)
+One or moreMatches the preceding token 1 or more times (greedy)
?OptionalMatches the preceding token 0 or 1 time
{n,m}Quantifier rangeMatches the preceding token between n and m times
()Capturing groupGroups tokens and captures the matched text for back-references
(?:)Non-capturing groupGroups tokens without capturing the matched text
(?=)Positive lookaheadMatches a position followed by the given pattern, without consuming it
(?<=)Positive lookbehindMatches a position preceded by the given pattern, without consuming it
[abc]Character classMatches any one of the characters inside the brackets
[^abc]Negated classMatches any character not inside the brackets
|AlternationMatches the expression before or after the pipe

Regex Bayrakları Açıklaması

Bayraklar (modifier olarak da bilinir), motorun deseni nasıl işlediğini değiştirir. JavaScript'te kapanış slash'ından sonra eklenir: /pattern/gi. Python'da ikinci argüman olarak iletilir: re.findall(pattern, text, re.IGNORECASE | re.MULTILINE). Her bayrak her dilde mevcut değildir.

BayrakAdDavranış
gGlobalFind all matches, not just the first one
iCase-insensitiveLetters match both uppercase and lowercase
mMultiline^ and $ match start/end of each line, not just the whole string
sDot-all. matches newline characters as well
uUnicodeTreat the pattern and subject as a Unicode string; enables \u{FFFF} syntax
yStickyMatches only from the lastIndex position in the target string

Kod Örnekleri

JavaScript, Python, Go ve komut satırında çalışan regex örnekleri. Her örnek, desen oluşturma, eşleşme çıkarma ve çıktıyı gösterir.

JavaScript
// Match all email addresses in a string
const text = 'Contact us at support@example.com or sales@example.com'
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g

const matches = text.matchAll(emailRegex)
for (const match of matches) {
  console.log(match[0], 'at index', match.index)
}
// → "support@example.com" at index 14
// → "sales@example.com" at index 37

// Named capture groups (ES2018+)
const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
const result = '2026-03-30'.match(dateRegex)
console.log(result.groups)
// → { year: "2026", month: "03", day: "30" }

// Replace with a callback
'hello world'.replace(/\b\w/g, c => c.toUpperCase())
// → "Hello World"
Python
import re

# Find all IPv4 addresses
text = 'Server 192.168.1.1 responded, fallback to 10.0.0.255'
pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'

matches = re.findall(pattern, text)
print(matches)  # → ['192.168.1.1', '10.0.0.255']

# Named groups and match objects
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Released on 2026-03-30')
if m:
    print(m.group('year'))   # → '2026'
    print(m.group('month'))  # → '03'

# Compile for repeated use (faster in loops)
compiled = re.compile(r'\b[A-Z][a-z]+\b')
words = compiled.findall('Hello World Foo bar')
print(words)  # → ['Hello', 'World', 'Foo']
Go
package main

import (
	"fmt"
	"regexp"
)

func main() {
	// Find all matches
	re := regexp.MustCompile(`\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b`)
	text := "Contact support@example.com or sales@example.com"
	matches := re.FindAllString(text, -1)
	fmt.Println(matches)
	// → [support@example.com sales@example.com]

	// Named capture groups
	dateRe := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`)
	match := dateRe.FindStringSubmatch("2026-03-30")
	for i, name := range dateRe.SubexpNames() {
		if name != "" {
			fmt.Printf("%s: %s\n", name, match[i])
		}
	}
	// → year: 2026
	// → month: 03
	// → day: 30

	// Replace with a function
	result := re.ReplaceAllStringFunc(text, func(s string) string {
		return "[REDACTED]"
	})
	fmt.Println(result)
	// → Contact [REDACTED] or [REDACTED]
}
CLI (grep / sed)
# Find lines matching an IP address pattern
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' access.log

# Extract email addresses from a file
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt

# Replace dates from YYYY-MM-DD to DD/MM/YYYY using sed
echo "2026-03-30" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
# → 30/03/2026

# Count matches per file in a directory
grep -rcE 'TODO|FIXME|HACK' src/
# → src/main.js:3
# → src/utils.js:1

Sıkça Sorulan Sorular

Regex ile glob desenleri arasındaki fark nedir?
Glob desenleri (*.txt veya src/**/*.js gibi), kabuk ve derleme araçlarında dosya yolu eşleştirmek için kullanılan basitleştirilmiş bir joker karakter sözdizimidir. * (herhangi bir karakter), ? (tek karakter) ve [] (karakter sınıfları) desteklenir; ancak niceleyiciler, gruplar, lookahead'ler ve alternatifler yoktur. Regex çok daha ifade gücüne sahiptir ve yalnızca dosya yollarında değil, keyfi metin üzerinde çalışır. Bir glob deseni *.json, yaklaşık olarak ^.*\.json$ regex'ine eşdeğerdir.
Regex'te nokta veya köşeli parantezi tam anlamıyla nasıl eşleştiririm?
Karakterin önüne ters eğik çizgi ekleyin: \. bir nokta karakterini, \[ bir köşeli parantezi eşleştirir. Karakter sınıfı [] içinde nokta zaten tam anlamıyla alınır ve kaçış gerekmez. Yaygın bir hata, 192.168.1.1 yazarken noktaları kaçırmamaktır; bu durumda desen 192x168y1z1 ile de eşleşir çünkü . "herhangi bir karakter" anlamına gelir.
Test verilerim sunucuya gönderiliyor mu?
Hayır. Bu araç, regex eşleştirmeyi tamamen tarayıcınızda JavaScript RegExp motoru kullanarak çalıştırır. Metin veya deseninizle herhangi bir ağ isteği yapılmaz. Bunu, aracı kullanırken tarayıcı Geliştirici Araçları Ağ sekmesini açarak doğrulayabilirsiniz.
Regex'im JavaScript'te neden çalışıyor ama Python'da neden başarısız oluyor?
JavaScript ve Python, biraz farklı özellik kümelerine sahip farklı regex motorları kullanır. JavaScript, \d, lookahead (?=) ve ES2018'den itibaren lookbehind (?<=) destekler; ancak koşullu desenler, atomik gruplar veya iyelikli niceleyiciler desteklenmez. Python'ın re modülü, \p{} Unicode özellik sınıflarını desteklemez (bunun yerine üçüncü taraf regex modülünü kullanın). Her zaman hedef dilin motorunda test edin veya dilin regex belgelerine başvurun.
Regex'te yıkıcı geri izlemeye ne yol açar?
Yıkıcı geri izleme, bir desenin üstel sayıda eşleşme yolu oluşturan iç içe niceleyicilere sahip olduğunda gerçekleşir. Klasik örnek, eşleşmeyen bir karakterin ardından gelen a dizisine uygulanan (a+)+'dır. Motor başarısız olmadan önce a'ları iç ve dış gruplar arasında bölmenin her olası yolunu dener. Bunu düzeltmek için atomik gruplar (?>), iyelikli niceleyiciler a++ kullanın ya da belirsiz tekrarı önleyecek şekilde deseni yeniden yazın.
HTML ayrıştırmak için regex kullanabilir miyim?
Regex, tek bir <a> etiketinden href çekmek gibi HTML parçalarından basit değerler çıkarabilir. Tam HTML ayrıştırma için uygun bir ayrıştırıcı kullanın (JavaScript'te DOMParser, Python'da BeautifulSoup, Go'da html/template). HTML bağlamdan bağımsız bir dilbilgisidir; regex ise düzenli dilbilgilerini işler. İç içe etiketler, isteğe bağlı nitelikler ve kendi kendine kapanan öğeler, regex'in güvenilir biçimde eşleştiremeyeceği desenler oluşturur.
Açgözlü ve tembel niceleyiciler arasındaki fark nedir?
Açgözlü bir niceleyici (* veya +), mümkün olduğunca fazla karakter eşleştirir; desenin geri kalanı başarısız olursa geri adım atar. Tembel bir niceleyici (*? veya +?), mümkün olduğunca az karakter eşleştirir ve yalnızca gerektiğinde genişler. <b>bir</b><b>iki</b> girdisi için açgözlü desen <b>.*</b>, ilk <b>'den son </b>'ye kadar tüm dizeyi eşleştirirken tembel desen <b>.*?</b>, <b>bir</b> ve <b>iki</b>'yi ayrı ayrı eşleştirir.