PCRE, 21 20 15 19 byte
(.|^)"\K(\\.|[^"])*
Coba 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, 25 23 byte
Terima kasih kepada Martin Büttner untuk bermain golf 2 byte.
(\\.|[^"])*+(?!"(?R)|$)
Coba di sini.
Penjelasan
(
\\.|[^"] # An escaped character, or a character that isn't a double quote
)*+ # Possessive zero-or-more quantifier, which means backtracking
# could not happen after first match is found. That means if \\.
# matched, it would never switch to [^"], because it is always a
# match if it just stopped after the \\. without backtracking.
(?!"(?R)|$) # Make sure it is not followed by a double quote and another
# match, or the end of the input.
Perhatikan bahwa quantifier posesif ( *+
) memastikan lookahead negatif selalu dimulai setelah seluruh string, atau seluruh segmen non-string.
Ada 4 kasus:
- Pertandingan dimulai di mana saja di luar string.
\\.
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.
- Pertandingan dimulai pada awal string.
(\\.|[^"])*+
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.
- Pertandingan dimulai pada akhir string. Ini cocok dengan string kosong dengan cara yang sama seperti case sebelumnya. Tetapi tidak masalah menurut klarifikasi.
- Pertandingan dimulai di tengah-tengah string. Tidak mungkin karena pertandingan tidak tumpang tindih.
\
sebelum string? Sebagai contohabc\"def"
.