DSOpenServer
DSO.Core.RegexLite Span tabanlı • allocation-minimal • .NET 6+
GitHub’da Aç
DokuzSistem Open Server ekosistemi

RegexLite

RegexLite, “başlangıç–bitiş belirteçleri” ile çalışan, Regex gerektirmeyen, span tabanlı ve allocation-minimal bir metin çıkarıcıdır. O(n) tarama yaklaşımıyla basit kurallı senaryolarda hızlı ve öngörülebilir bir alternatif sunar.

O(n) tarama ReadOnlySpan/Memory includeBounds required / excluded allowNesting escapeChar StringComparison
MIT Lisansı Tek dosya: RegexLite.cs Düşük GC • kopyasız işleme

Özellikler

RegexLite; open/close belirteçleriyle tarama yapar, gerektiğinde sınırları dahil eder, eşleşmeleri en kısa/en uzun olarak seçebilir ve iç içe (nested) yapıları isteğe bağlı olarak dengeler.

Hedef: Regex’in ifade gücüne ihtiyaç olmayan, open/close + içerir/içermez kurallı senaryolarda daha basit, hızlı ve öngörülebilir bir alternatif.

Kurulum

Bu proje tek dosyalık bir yardımcıdır. NuGet gerekmez (ileride paketlenebilir).

// 1) Bu dosyayı projenize ekleyin:
RegexLite.cs

// 2) Hedef çerçeve:
.NET 6+

Hızlı Başlangıç

Aşağıdaki örnek, id= içeren <div ... </div> bloklarını yakalar ve bazı kelimeleri dışlar.

// id= içeren <div ... </div> bloklarını çıkar, hidden/disabled geçenleri ele
var rx = new RegexLite(
    open: "<div",
    close: "</div>",
    requiredContains: "id=",
    excludedContains: new[] { "hidden", "disabled" },
    includeBounds: true,         // <div ... </div> dahil
    longest: false,              // en kısa (non-greedy)
    allowNesting: false,
    escapeChar: '\\',
    comparison: StringComparison.Ordinal);

// İlk eşleşme (Regex.Match gibi)
var m = rx.Match(html);
if (m.Success)
{
    // m.Memory → ReadOnlyMemory<char>
    // m.Span   → ReadOnlySpan<char> (allocation yok)
    Console.WriteLine(m.Value);  // string'e çevirmek istersen (allocate eder)
}

// Tüm eşleşmeler (Regex.Matches gibi)
foreach (var mm in rx.Matches(html))
{
    // Kopyasız işleme:
    var span = mm.Span;
}

// Replace — sabit metin
string blocked = rx.Replace(html, "[BLOCK]");

// Replace — evaluator
string tagged = rx.Replace(html, mm => $"[{mm.Value}]");

API Özeti

RegexLite iki kurucu (string/char belirteçler) ve temel Match/Maches/IsMatch/Replace operasyonlarını sağlar.

Kurucular
// String belirteçler
public RegexLite(
    string open,
    string close,
    string? requiredContains = null,
    IReadOnlyList<string>? excludedContains = null,
    bool includeBounds = false,
    bool longest = false,
    bool allowNesting = false,
    char? escapeChar = null,
    StringComparison comparison = StringComparison.Ordinal);

// Char belirteçler
public RegexLite(
    char open,
    char close,
    string? requiredContains = null,
    IReadOnlyList<string>? excludedContains = null,
    bool includeBounds = false,
    bool longest = false,
    bool allowNesting = false,
    char? escapeChar = null,
    StringComparison comparison = StringComparison.Ordinal);
Metotlar
// İlk eşleşme
LiteMatch Match(string input, int startAt = 0);

// Tüm eşleşmeler (liste)
List<LiteMatch> Matches(string input, int startAt = 0, int maxMatches = int.MaxValue);

// Varlık kontrolü
bool IsMatch(string input, int startAt = 0);

// Değiştir — sabit replacement
string Replace(string input, string replacement, int startAt = 0, int maxReplacements = int.MaxValue);
Performans ipucu: Eşleşmeleri işlerken mümkünse Span/Memory üzerinden ilerle, gerçekten gerektiğinde .ToString() ile string üret.

Katkı (Contributing)

Öneri ve geri bildirimler için issue açabilir, PR gönderebilirsiniz. Kurumsal akış önerisi: küçük, odaklı PR; açıklayıcı commit mesajları; mümkünse örnek/test ekleme.

Hızlı katkı adımları
  • Repo’yu fork’la
  • Feature/bugfix branch aç
  • Değişiklik + örnek kullanım ekle
  • PR aç ve senaryoyu anlat
İletişim
Kurumsal bilgi ve hizmetler için: dokuzsistem.com