logo
GeekFormat

Normal İfade Test Cihazı

Regex Tester
//
无匹配
Worker · 500ms 超时中断
分类模板库
点选即可填充 pattern / flags / demo
测试文本37
匹配详情
0

还没有匹配结果

输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。

匹配高亮预览· Hover / 点击右侧条目联动
Ada Lovelace Alan Turing Grace Hopper

统计

匹配数量
0
执行耗时
0ms
捕获组
0
命名分组
0

命名分组汇总

当前没有命名分组。

JS'te gerçek zamanlı eşleştirme testi, yakalama gruplarını/isimlendirilmiş grupları görüntüleme, değiştirme önizlemesi, normal ifade sözdizimi açıklaması, Web Worker aracılığıyla yerleşik ReDoS zaman aşımı koruması, sık kullanılan normal ifade şablonları kütüphanesi ile ücretsiz çevrimiçi normal ifade test cihazı (Regex Tester), geliştiricilerin normal ifadeleri hızla hata ayıklaması ve doğrulaması için idealdir.

İlgili Öneriler

Kullanım senaryoları

  • Form doğrulama kuralları geliştirirken e-posta, telefon numarası, kimlik numarası, URL vb. için normal ifadelerin doğru olup olmadığını çevrimiçi test etme
  • Günlük analizi yaparken normal ifadelerle ERROR/INFO seviyesindeki günlüklerden zaman damgalarını, hata mesajlarını, IP adreslerini çıkarma
  • Veri temizleme/ETL sırasında tarih biçimi dönüştürme, hassas bilgileri maskeleme (telefon numarasının ortasına yıldız koyma) gibi normal ifade değiştirme etkisini önizleme
  • Web tarayıcı yazarken içerik çıkarma normal ifadesinin hedef HTML parçalarıyla veya JSON alanlarıyla doğru şekilde eşleşip eşleşmediğini kontrol etme
  • Normal ifadeleri öğrenirken «Açıkla» paneli aracılığıyla her meta karakterin ve niceleyicinin anlamını anlama, şablonlarla hızla başlama
  • Kod İncelemesi sırasında şüpheli normal ifadeleri paylaşım bağlantısı aracılığıyla meslektaşlara göndererek birlikte hata ayıklama ve iyileştirme

Özellikler

  • Web Worker sanal alanında yürütme: normal ifadeler ayrı bir Worker iş parçacığında çalışır, 500 ms zaman aşımıyla otomatik olarak kesilir, ReDoS'un tarayıcıyı dondurmasını tamamen önler
  • Gerçek zamanlı eşleştirme + renkli vurgulama: eşleştirme sonuçları girildiğinde anında görüntülenir, farklı eşleşmeler 5 renkle vurgulanır, üzerine gelindiğinde ilişkili ayrıntı paneli görüntülenir
  • Yakalama grupları + isimlendirilmiş gruplar: her eşleşme için tüm yakalama grupları ($1/$2) ve isimlendirilmiş gruplar ($<name>) otomatik olarak genişletilir ve özet istatistiklerle görüntülenir
  • Değiştirme önizlemesi: bir değiştirme dizesi girin ve sonucu gerçek zamanlı olarak görün, $1/$&/$`/$'/$<name> sözdizimi için hızlı ekleme düğmelerini destekler
  • Normal ifade sözdizimi açıklaması: normal ifadeyi otomatik olarak analiz eder, meta karakterlerin, niceleyicilerin, grupların, çapaların vb. anlamını öğe öğe açıklar
  • 12 sık kullanılan şablon: e-posta/URL/telefon numarası/Çince/IPv4/UUID/tarih/günlük/HTML etiketleri vb. için 12 yüksek sıklıkta normal ifade şablonu yerleşik olarak bulunur, tek tıklamayla doldurma
  • 6 bayrak geçişi: g/i/m/s/u/y bayraklarını değiştirmek için görsel düğmeler, sözdizimini hatırlamaya gerek yok
  • Paylaşım bağlantısı: tek tıklamayla pattern/flags/text içeren bir URL oluşturun, test durumunu doğrudan yeniden oluşturmak için meslektaşınıza kopyalayın
  • Yürütme istatistikleri: eşleşme sayısını, yürütme süresini (ms), toplam yakalama grubu sayısını, isimlendirilmiş grup sayısını gerçek zamanlı olarak görüntüler
  • 1500 eşleşme sınırı: çok uzun metinlerin sayfanın donmasına neden olmasını önlemek için otomatik kesme, geçersiz normal ifadeler için sözdizimi hatası hakkında dostça bir mesaj

Nasıl Kullanılır

  1. Normal ifadeyi üstteki / / arasındaki giriş alanına girin (kendiniz eğik çizgi eklemenize gerek yok), bayrakları sağa girin (örneğin g, gi, gim) veya değiştirmek için aşağıdaki düğmelere tıklayın
  2. Eşleştirilecek metni «Test metni» alanına yapıştırın veya yazın, eşleşme sonuçları anında farklı renklerle vurgulanır
  3. Her eşleşmenin konumunu, içeriğini, yakalama gruplarını ve isimlendirilmiş gruplarını görüntülemek için sağdaki «Eşleşme ayrıntıları» paneline tıklayın
  4. «Değiştirme alanı» sekmesine geçin, bir değiştirme dizesi girin ($1/$&/$<name> vb. başvuruları destekler), değiştirme sonucunu gerçek zamanlı olarak görün
  5. Normal ifade sözdiziminin otomatik olarak oluşturulan öğe öğe açıklamasını görüntülemek için «İfade açıklaması» sekmesine geçin
  6. Sık kullanılan şablonlara ihtiyacınız olduğunda, soldaki «Kategorize edilmiş şablon kütüphanesi»ne tıklayın ve ilgili şablonu tek tıklamayla doldurmak için seçin; hata ayıklamayı tamamladıktan sonra bağlantı oluşturmak için «Paylaş»a tıklayın

Sık Sorulan Sorular

ReDoS nedir? Normal ifade testi neden ReDoS'a karşı koruma gerektirir?

ReDoS (Regular Expression Denial of Service, Normal İfade Hizmet Reddi), kötü niyetli olarak oluşturulmuş bazı normal ifadelerin (örneğin uzun dizilerle eşleşen `(a+)+$`) feci geri izleme (catastrophic backtracking) tetiklemesiyle %100 CPU kullanımına, tarayıcının donmasına veya sunucunun çökmesine neden olduğu bir durumdur. Bu araç, normal ifade eşleştirmesini 500 ms zaman aşımıyla otomatik olarak kesen yalıtılmış bir Web Worker ortamında yürütür, bu nedenle geri izlemeye neden olan kötü niyetli normal ifadeler bile tarayıcınızı dondurmaz — bu aracın temel güvenlik özelliğidir.

Normal ifadelerdeki g, i, m, s, u, y altı bayrağı ne anlama gelir?

g (global) genel eşleştirme, yalnızca ilkini değil tüm eşleşmeleri bulur; i (ignoreCase) büyük/küçük harf duyarlılığını yoksayar; m (multiline) çok satırlı mod, ^ ve $ karakterlerinin her satırın başlangıcını/sonunu eşlemesini sağlar; s (dotAll) nokta . karakterinin yeni satır karakteri de dahil olmak üzere tüm karakterleri eşlemesini sağlar; u (unicode) Unicode modu, emojileri ve çok baytlı karakterleri doğru şekilde işler; y (sticky) yapışkan eşleştirme, lastIndex konumundan tam olarak eşleştirir. Bu araç, 6 bayrak için görsel geçiş düğmeleri sağlar, gerçek zamanlı olarak açmak/kapatmak için tıklayın.

Yakalama grupları ve isimlendirilmiş gruplar nedir? Nasıl kullanılır?

Yakalama grupları yuvarlak parantezlerle `(pattern)` sarılır, eşleştirmeden sonra alt dizeler $1, $2 vb. başvurular kullanılarak çıkarılabilir. İsimlendirilmiş gruplar `(?<name>pattern)` sözdizimini kullanır, eşleştirmeden sonra `$<name>` ile başvurulabilir, bu da kodun okunabilirliğini artırır. Örneğin, bir tarihi `(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})` ile eşleştirdikten sonra, değiştirme dizesinde `$<year>年$<month>月$<day>日` olarak yeniden biçimlendirebilirsiniz. Bu araç, her eşleşme için yakalama gruplarının ve isimlendirilmiş grupların sonuçlarını otomatik olarak listeler.

Hangi programlama dillerinin normal ifade sözdizimini destekler?

Bu araç JavaScript'in yerel RegExp motorunu temel alır ve JS/TypeScript, Python re modülü, Java java.util.regex, PHP preg_*, Go regexp gibi ana motorların sözdizimiyle genel olarak uyumludur (hepsi PCRE/Perl akımını temel alır), temel farklar bazı gelişmiş özelliklerdedir (örneğin Python'daki `(?P<name>)` isimlendirilmiş grup sözdizimi, .NET'teki değişken uzunluklu lookbehind). Günlük geliştirmedeki normal ifadelerin %99'u (e-posta, telefon numarası, URL, tarih vb. doğrulama/çıkarma) tüm motorlar arasında evrenseldir, bunları doğrudan bu araçta test ettikten sonra koda kopyalayabilirsiniz.

Test edilmiş bir normal ifadeyi meslektaşlarımla nasıl paylaşabilirim?

Üst araç çubuğundaki «Paylaş» düğmesine tıklayın, araç mevcut normal ifadeyi, bayrakları ve test metnini otomatik olarak URL parametrelerine kodlar ve bağlantıyı panoya kopyalar. Meslektaşlarınız bağlantıyı açtığında tam olarak aynı test durumunu (pattern+flags+testText) görür, bu da ekip çalışması ve uzaktan hata ayıklama için idealdir.

Değiştirme dizesindeki $1, $&, $`, $' özel sembolleri ne anlama gelir?

Değiştirme dizesinde: $1, $2... N'inci yakalama grubunu belirtir; $& tüm eşleşen metni belirtir; $` eşleşen metinden önceki kısmı belirtir; $' eşleşen metinden sonraki kısmı belirtir; $$ gerçek $ karakterini belirtir; $<name> isimlendirilmiş bir grubu belirtir. Örneğin, `(\d{4})-(\d{2})-(\d{2})` ifadesini `$2/$3/$1` ile değiştirmek 2026-03-12 tarihini 03/12/2026'ya dönüştürür. Bu aracın değiştirme alanında bu özel semboller için hızlı ekleme düğmeleri bulunur.

Normal ifade (Regex/RegExp) nedir?

Normal ifade (Regular Expression, kısaca Regex/RegExp), tek bir dize kullanarak belirli sözdizimi kurallarına uyan bir dizi diziyi tanımlayan ve eşleştiren bir metin deseni dilidir. Tarihi, 1950'lerde nörolog Warren McCulloch ve matematikçi Walter Pitts tarafından önerilen nöronların matematiksel modeline kadar uzanır, daha sonra matematikçi Stephen Kleene 1956'da buna dayanarak «normal kümeler»in cebirsel tanımını önerdi. Unix'in babası Ken Thompson, 1960'ların sonunda normal ifadeleri ilk olarak QED düzenleyicisinde uyguladı, bundan sonra normal ifadeler Unix araç zincirinin (grep, sed, awk, vi) temel işlevi haline geldi.

Modern programlama dillerinde normal ifadeler neredeyse standart bir yetenektir — JavaScript'teki RegExp, Python'daki re modülü, Java'daki java.util.regex, .NET'teki Regex sınıfı, Go'daki regexp paketi normal ifade desteği sağlar. Normal ifadeler, form doğrulama (e-posta/telefon numarası/kimlik), metin arama ve değiştirme (düzenleyicilerde bul ve değiştir), günlük analizi (ERROR günlüklerini çıkarma), web tarayıcıları (HTML içeriği çıkarma), veri temizleme (ETL), rota eşleştirme, girdi filtreleme ve güvenlik koruması (WAF kuralları) gibi senaryolarda yaygın olarak kullanılır.

Normal ifadelerin temel kavramları şunları içerir: karakter sınıfları (\d rakamlar, \w kelime karakterleri, \s boşluk), niceleyiciler (* sıfır veya daha fazla, + bir veya daha fazla, ? sıfır veya bir, {n,m} belirtilen sayıda), çapalar (^ başlangıç, $ son, \b kelime sınırı), gruplar (... yakalama grubu, (?:...) yakalamayan grup, (?<name>...) isimlendirilmiş grup), dallanma (|), karakter kümeleri ([a-z]), etrafına bakma ((?=...) pozitif ileri bakış, (?!) negatif ileri bakış) vb. Normal ifadelerde uzmanlaşmak metin işleme verimliliğini önemli ölçüde artırır, ancak ReDoS gibi performans tuzaklarına karşı korumaya da dikkat edilmelidir.

术语表

Regex / RegExp
Regular Expression'ın (Normal İfade) kısaltması, metin arama, değiştirme ve doğrulama için kullanılan, metin eşleştirme desenlerini tanımlayan bir dize sözdizimi.
Yakalama Grubu (Capture Group)
Yuvarlak parantezlerle (pattern) sarılmış alt ifade, eşleştirme sonuçlarına $1, $2 ile konuma göre başvurulabilir.
İsimlendirilmiş Grup (Named Group)
(?<name>pattern) sözdizimiyle tanımlanan bir yakalama grubu, $<name> ile ada göre başvurulabilir, sayısal başvurulardan daha yüksek okunabilirlik sağlar.
ReDoS
Regular Expression Denial of Service (Normal İfade Hizmet Reddi), normal ifadenin yürütme süresinin üstel olarak artmasına neden olan feci geri izlemeden kaynaklanır, tarayıcıyı veya sunucuyu dondurur.
Geri İzleme (Backtracking)
NFA normal ifade motorunun başarısız bir eşleştirme girişiminde diğer olasılıkları denemek için önceki konuma geri döndüğü mekanizma; karmaşık normal ifadeler üstel geri izlemeye neden olabilir.
Bayraklar (Flags)
Normal ifade eşleştirme davranışını değiştiren parametreler, yaygın olanlar: g(genel), i(büyük/küçük harf duyarlılığını yoksay), m(çok satırlı), s(dotAll), u(Unicode), y(yapışkan).
Etrafına Bakma (Lookaround)
Sıfır genişlikli iddialar, pozitif ileri bakış (?=...), negatif ileri bakış (?!...), pozitif geri bakış (?<=...), negatif geri bakış (?<!...) dahil olmak üzere, yalnızca konumu kontrol eder, karakterleri tüketmez.
PCRE
Perl Compatible Regular Expressions (Perl ile uyumlu normal ifadeler), PHP, Java, Python gibi çoğu dil tarafından benimsenen, yaygın olarak kullanılan bir normal ifade sözdizimi standardı.
Web Worker
Tarayıcının ana iş parçacığından bağımsız arka plan iş parçacığı API'si, bu araç normal ifadeleri Worker'da yürütmek için kullanır, böylece ReDoS oluşsa bile kullanıcı arayüzü engellenmez.
Niceleyici (Quantifier)
Önceki öğenin kaç kez tekrarlanacağını belirten sözdizimi: *(0 veya daha fazla), +(1 veya daha fazla), ?(0 veya 1), {n}(tam olarak n kez), {n,m}(n ila m kez).

Sık kullanılan normal ifade meta karakterleri için hızlı başvuru kılavuzu

Meta karakterAnlamıÖrnek açıklama
.Herhangi bir karakter (yeni satır hariç, s bayrağıyla yeni satır dahil)a.c abc, aXc ile eşleşir, a\nc ile eşleşmez
\dRakam karakteri, [0-9] ile eşdeğerdir\d{3} 123, 456 ile eşleşir
\wKelime karakteri, [A-Za-z0-9_] ile eşdeğerdir\w+ hello_123 ile eşleşir
\sBoşluk karakteri (boşluk/sekme/yeni satır vb.)a\sb a b (arada boşluk) ile eşleşir
^Dizenin başlangıcı (m bayrağıyla — satır başı)^Hello satır başındaki Hello ile eşleşir
$Dizenin sonu (m bayrağıyla — satır sonu)end$ satır sonundaki end ile eşleşir
\bKelime sınırı\bcat\b tek başına cat kelimesiyle eşleşir, category ile eşleşmez
*Önceki öğe 0 veya daha fazla kez tekrarlanır (açgözlü)ab*c ac, abc, abbc ile eşleşir
+Önceki öğe 1 veya daha fazla kez tekrarlanırab+c abc, abbc ile eşleşir, ac ile eşleşmez
?Önceki öğe 0 veya 1 kez (veya açgözlü olmayan/etrafına bakma için kullanılır)colou?r color ve colour ile eşleşir
|Dallanma/veya, solu veya sağı eşleştirircat|dog cat veya dog ile eşleşir
[...]Karakter kümesi, içindeki herhangi bir karakterle eşleşir[aeiou] herhangi bir sesli harfle eşleşir

Sık kullanılan normal ifadeler için hızlı başvuru şablonları

Kullanım amacıNormal ifadeÖnerilen bayraklar
E-posta adresi[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}g
Çin anakarası cep telefonu numarası1[3-9]\d{9}g
URL bağlantısıhttps?:\/\/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_+.~#?&/=]*gi
IPv4 adresi\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bg
Tarih YYYY-MM-DD\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])g
Kimlik numarası (18 haneli)[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]g
UUID[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}gi

Code Examples

JavaScript'te normal ifade eşleştirme ve değiştirme

// E-posta biçimini doğrula
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRe.test('user@example.com')); // true

// İsimlendirilmiş grupları çıkar (tarih ayrıştırma)
const dateRe = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'Toplantı zamanı: 2026-03-12, son tarih: 2026-04-01';
const matches = [...text.matchAll(dateRe)];
for (const m of matches) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
}

// Değiştirme: tarih biçimi dönüşümü YYYY-MM-DD → MM/DD/YYYY
const reformatted = text.replace(dateRe, '$<month>/$<day>/$<year>');
console.log(reformatted);
// Toplantı zamanı: 03/12/2026, son tarih: 04/01/2026

Python'da re modülünü kullanma

import re

# Tüm eşleşmeleri bul
text = 'İletişim: alice@example.com, bob@test.org'
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
print(emails)  # ['alice@example.com', 'bob@test.org']

# İsimlendirilmiş grupları çıkar (Python'da ?P<name> sözdizimi kullanılır)
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Yayınlanma tarihi 2026-03-12')
if m:
    print(m.group('year'), m.group('month'), m.group('day'))

# Değiştirme: telefon numarasının ortadaki 4 hanesini maskele
phone_re = r'(1[3-9]\d)\d{4}(\d{4})'
result = re.sub(phone_re, r'\1****\2', 'Telefon numarası: 13812345678')
print(result)  # Telefon numarası: 138****5678

Java'da java.util.regex kullanma

import java.util.regex.*;

class RegexDemo {
    public static void main(String[] args) {
        String text = "Error [2026-03-12 18:05:09] Connection failed";

        // Normal ifadeyi derle (üretim ortamında Pattern örneği önbelleğe alınmalıdır)
        Pattern p = Pattern.compile(
            "(?<level>INFO|WARN|ERROR)\\s+\\[(?<time>[^\\]]+)\\]\\s+(?<message>.+)"
        );
        Matcher m = p.matcher(text);

        if (m.find()) {
            System.out.println("Seviye: " + m.group("level"));
            System.out.println("Zaman: " + m.group("time"));
            System.out.println("Mesaj: " + m.group("message"));
        }

        // Tüm rakamları değiştir
        String cleaned = "abc123def456".replaceAll("\\d+", "*");
        System.out.println(cleaned); // abc*def*
    }
}

Authoritative References