Pertimbangkan bahasa regex dengan quantifier greedy , quantifier nongreedy, pergantian kelas, dan kelas karakter. (Ini pada dasarnya adalah sebuah subbahasa dari PCRE tanpa referensi balik, pernyataan sekilas, atau beberapa bit lain yang lebih menarik.)
Sebuah pertandingan untuk untuk regex pada tali adalah interval setengah terbuka lebih sehingga diterima oleh .
Kami memberikan definisi rekursif dari apa yang membuat satu pertandingan lebih baik daripada yang lain. Sebuah pertandingan untuk regex R pada string adalah lebih baik daripada pertandingan lain b = [ b 0 , b 1 ) jika suatu 0 < b 0 atau, jika sebuah 0 = b 0 dan:
Jika adalah kelas karakter: Kelas karakter memiliki kecocokan unik, sehingga semua kecocokan pada posisi yang sama untuk R adalah sama. Karenanya kasus ini tidak mungkin.
Jika :
- Bagian utama dari adalah kecocokan yang lebih baik untuk S daripada bagian terkemuka dari b , atau
- Bagian terdepan dari dan b adalah kecocokan yang sama baiknya untuk S , dan bagian tambahan dari a adalah kecocokan yang lebih baik untuk T daripada bagian akhir dari b .
Jika :
- adalah kecocokan untuk S dan b tidak, atau
- dan b adalah pertandingan sama baik untuk S dan sebuah merupakan pertandingan yang lebih baik untuk S dari b , atau
- dan b tidak cocok untuk S tetapi pertandingan untuk T , dan sebuah merupakan pertandingan yang lebih baik untuk T dari b adalah.
Semua bentuk sintaksis lainnya mengurangi ke tiga di atas untuk tujuan prioritas pertandingan:
- : R ≡ S 0 | S 1 | ...
- : R ≡ … | S 1 | S 0
Pola tak terhingga ini digunakan hanya untuk tujuan prioritas pertandingan --- mereka bukan bagian dari bahasa pertandingan yang sedang dipertimbangkan.
Relasi "yang lebih baik" adalah urutan linier yang lemah pada semua kecocokan yang memungkinkan untuk suatu pola tertentu.
Sebut dua regexes pertandingan-setara jika, untuk setiap string input yang terbatas, set berpasangan menguraikan pertandingan terbaik untuk S sama dengan set berpasangan menguraikan pertandingan terbaik untuk T .
T: Apakah ini kasus bahwa untuk setiap regex mengandung quantifier nongreedy ∗ ? ada regex T yang setara dengan pertandingan yang tidak mengandung penjumlahan nongreedy?
Sunting: Ini adalah penulisan ulang lengkap pertanyaan untuk memperjelas apa yang ditanyakan.
a+?
) masih {a ^ n: n≥1}. Jika Anda melakukan pertandingan regex yang tidak dikurung (seperti 'aaaa' =~ /a+?/
di Perl), Anda tidak akan mendapatkan aaaa
hasilnya, tetapi itu hanya karena cabang dicoba dengan urutan yang berbeda a+
. Jika Anda melakukannya dengan tepat dengan jangkar (seperti 'aaaa' =~ /^a+?\z/
di Perl), Anda mendapatkan aaaa
hasilnya.
//g
dalam Perl) akan kembali?
\tt
tidak mencegah LaTeX menafsirkan karakter khusus dan mengontrol urutan!)