Tugas Anda di sini adalah menulis dua ekspresi reguler, yang masing-masing cocok dengan yang lain tetapi tidak cocok dengan dirinya sendiri.
Kedua ekspresi reguler harus memiliki bentuk ini:
/pattern/optional-flags
Ini juga bentuk di mana mereka harus dicocokkan.
Solusi terpendek menang. Panjang solusi dihitung sebagai jumlah karakter dalam kedua ekspresi reguler termasuk garis miring dan bendera.
Gunakan standar sintaksis regex pilihan Anda, atau tentukan bahasa pemrograman, ketika itu membuat perbedaan.
Selamat bersenang-senang!
code-golf
regular-expression
GOTO 0
sumber
sumber
/a/
cocokabc
?/^%/
dan%^/%
)Jawaban:
PRCE dengan pengubah A: 9 karakter
Meskipun ini merupakan varian dari
/modifier$/
jawaban Doorknob , saya pikir inovasi ini memenuhi syarat sebagai jawaban yang terpisah dan bukan komentar atas jawabannya: pengubah melakukan tugas ganda. Alih-alih berada di sana hanya untuk regex lain untuk mencocokkan, itu jangkar.Regex pertama cocok dengan string apa pun yang berakhir dengan literal
A
. Regex kedua cocok dengan string apa pun yang karakter keduanya adalah literalA
, menggunakan bendera jangkar untuk memulai.Demo online
sumber
//
cocok dengan apa pun yang berarti bahwa masing-masing regex dapat memiliki paling banyak tiga karakter non-pembatas. Menggunakan PHP PCRE terdapat 73339 regex yang tidak cocok dengan diri sendiri dalam batasan itu, dan pemeriksaan lengkap dari pasangan yang panjangnya kurang dari 10 (pada urutan 32Mpairs daripada 5.7Gpairs karena kebanyakan dari mereka 5 chars termasuk pembatas) muncul. solusi ini dan tidak ada yang lain. Karena itu saya mengklaim bahwa itu optimal untuk mesin regex tertentu.4 + 6 = skor 10
Regex pertama:
Regex kedua:
Hore untuk penyalahgunaan bendera! :-P
Yang pertama cocok dengan apa pun yang berakhir dengan
i
(oleh karena itu, setiap regex dengani
bendera).Yang kedua cocok dengan karakter kedua
i
.Versi alternatif:
/i$/g
dan/g$/i
.sumber
/x.$/
dan/^.x/
untuk sekelompok x/i$/
dan/\/$/i
/i$/
dan/i\$/i
Regex JavaScript, skor: 18
Regex pertama:
Regex kedua:
Tes JavaScript:
Tes online: http://jsfiddle.net/99Sx6/
sumber
Ruby regex, 15
Ekspresi reguler:
Hanya menghitung karakter ...
Versi online
sumber
4 + 6 = 10
Regex pertama:
Regex kedua:
i$
cocok dengan sesuatu yang berakhir dengani
, yang kedua./$
cocok dengan sesuatu yang berakhir dengan/
, yang pertama.sumber
5 + 5 = 10
Regex # 1:
Regex # 2:
The
0
s di kedua regexes bisa diganti dengan non-metakarakter dan regex masih bekerja.0.$
cocok dengan apa pun yang karakter terakhir kedua adalah0
, dan^.0
cocok dengan apa pun yang karakter kedua adalah0
.sumber
/
es. Alternatifnya adalah penipuan komentar pada jawaban Doorknob.Regex JavaScript, skor: 13
Regex pertama:
Regex kedua:
Penjelasan: regex pertama cocok dengan semua yang mengandung digit, dan regex kedua cocok dengan semua yang tidak mengandung a
0
.Tes JavaScript:
Tes online: http://jsfiddle.net/5VYjC/1/
sumber
12 karakter ;) JS regex
sumber
Nilai: 5 + 5 = 10
Butuh waktu setengah jam untuk mencari tahu tapi saya benar-benar senang saya melakukannya :)
1 adalah:
/j.$/
2 adalah:
/^.j/
Yang pertama cocok dengan yang
j
terjadi di posisi kedua mulai dari kanan. 2 cocok dengan yangj
terjadi di posisi kedua mulai dari kiri.Saya belum menguji tetapi saya berpikir bahwa RegExs ini benar-benar serbaguna karena
j
dapat diganti dengan\w
karakter apa pun (atau lebih?) Dan masih harus berfungsi dengan baik.PS Ini seharusnya (semoga) bekerja dalam bahasa apa pun. Padahal, jika tidak berhasil, tolong informasikan di komentar di bawah ini :)
Uji
sumber
PCRE menggunakan pengubah x: 11 karakter
Yang pertama cocok dengan string apa pun dengan karakter spasi, tetapi tidak mengandung spasi. Yang kedua berisi spasi putih, tetapi diabaikan karena
x
pengubah; cocok dengan string apa pun yang karakter kedua dari belakangnyas
.PCRE dan mesin lainnya menggunakan kelas karakter: 11 karakter
Yang pertama cocok dengan string apa pun dengan karakter "kata" (huruf, angka, garis bawah) diikuti oleh literal
w
; yang kedua cocok dengan sembarang string dengan karakter non-kata diikuti oleh literalw
.PCRE dan mesin lainnya menggunakan kelas karakter dan anchor batas kata: 11 karakter
Yang pertama cocok dengan sembarang string dengan dua karakter "kata" berturut-turut; string kedua dengan karakter non-kata atau string awal diikuti dengan literal
w
.sumber
ECMAScript (11 byte):
Mesin REGEXP Lainnya (14 byte):
Tanggal 1 cocok dengan \ d [..] atau \ 1d [..].
Yang kedua cocok dengan sembarang string dengan angka.
EDIT:
Awalnya, jawaban ini diposting karena kompatibel dengan semua mesin, tetapi terbukti salah.
Ada masalah dengan referensi ke grup penangkap (misalnya, dalam php).
sumber
\1
tidak diartikan sebagai referensi belakang?"/^\1?d/"
Anda akan mengalami masalah, tetapi jika Anda melakukannya'/^\1?d/'
, maka tidak apa-apa. Kutipan membuat perbedaan besar ketika kode ditafsirkan.