Tugas Anda adalah menulis RegEx yang cocok dengan semua yang ada di dalam string.
Sebuah string didefinisikan sebagai semua yang dikelilingi oleh (tetapi tidak termasuk) dua unescaped "
.
A "
dapat diloloskan oleh \
, yang juga dapat diloloskan lagi.
Testcases
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
Mencetak gol
Solusi terpendek menang.
Spesifikasi
- Silakan tentukan rasa yang digunakan.
- Masukan akan seimbang
"
. - Tidak akan ada
\
yang segera mendahului pembatas string-awal. Misalnya, Anda tidak perlu menanganiabc\"def"
code-golf
string
regular-expression
syntax
Biarawati Bocor
sumber
sumber
\
sebelum string? Sebagai contohabc\"def"
.abc"de"
, satu adalahd
dan yang lainnyae
?Jawaban:
PCRE,
21201519 byteCoba di sini.
Ini cocok dengan karakter (atau awal input) sebelum kutipan ganda awal dan kemudian mengatur ulang pertandingan, untuk memastikan kutipan ganda tidak dibagi dengan pertandingan lain.
PCRE,
2523 byteTerima kasih kepada Martin Büttner untuk bermain golf 2 byte.
Coba di sini.
Penjelasan
Perhatikan bahwa quantifier posesif (
*+
) memastikan lookahead negatif selalu dimulai setelah seluruh string, atau seluruh segmen non-string.Ada 4 kasus:
\\.
tidak akan pernah cocok dengan kutipan ganda sesuai dengan klarifikasi. Itu hanya bisa berakhir tepat sebelum tanda kutip ganda berikutnya yang memulai string, atau akhir input. Kedua kasus gagal tampilan negatifnya.(\\.|[^"])*+
akan cocok dengan string yang lengkap. Karakter selanjutnya harus berupa kutipan ganda, dan tidak bisa menjadi akhir dari input. Setelah kutipan ganda itu di luar string, jadi itu tidak bisa menjadi pasangan lain. Jadi itu melewati lookahead negatif.sumber
(\\.|[^"])
bekerja([^\\"]|\\.)
bukan, sebagai solusi lengkap.\\.
hanya gagal ketika tidak ada karakter setelah\
(atau karakter baris baru, tetapi itu dapat diperbaiki dengan bendera), dan kasus itu ditutupi oleh pandangan negatif di belakang. Kuantitatif posesif mencegah kemunduran, jadi kami tidak punya kasus lain untuk dilihat.JavaScript, 24 byte
"([^"\\]*(?:\\.[^"\\]*)*)"
Grup 1 adalah isi string.
sumber
"
s luarJavaScript,
21151312 byte"((\\?.)*?)"
Isi string dalam grup 1.
sumber