Twoim zadaniem jest napisanie RegEx, który pasuje do wszystkiego wewnątrz ciągów.
Łańcuch jest zdefiniowany jako wszystko otoczone (ale nie wliczając) dwóch nieskalowanych "
.
"
Można uciekł \
, które mogą również być ponownie uciekł.
Przypadki testowe
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
Punktacja
Najkrótsze rozwiązanie wygrywa.
Okular
- Proszę podać zastosowany smak.
- Wejście będzie zbalansowane
"
. - Nie będzie takiego,
\
który natychmiast poprzedzi separator rozpoczynający ciąg. Na przykład nie trzeba obsługiwaćabc\"def"
code-golf
string
regular-expression
syntax
Leaky Nun
źródło
źródło
\
przed sznurkiem? Na przykładabc\"def"
.abc"de"
, jedno jest,d
a drugie jeste
?Odpowiedzi:
PCRE,
21201519 bajtówWypróbuj tutaj.
To dopasowuje znak (lub początek danych wejściowych) przed początkowym podwójnym cytatem, a następnie resetuje dopasowanie, aby upewnić się, że podwójny cytat nie jest współdzielony z innym dopasowaniem.
PCRE,
2523 bajtówPodziękowania dla Martina Büttnera za grę w golfa na 2 bajtach.
Wypróbuj tutaj.
Wyjaśnienie
Zauważ, że kwantyfikator dzierżawczy (
*+
) upewniał się, że ujemne spojrzenie w przód zawsze zaczyna się po całym łańcuchu lub całym segmencie łańcucha.Istnieją 4 przypadki:
\\.
zgodnie z wyjaśnieniem nigdy nie pasowałby do podwójnego cytatu. Może zakończyć się tuż przed następnym podwójnym cudzysłowem, który rozpoczyna ciąg lub koniec danych wejściowych. Oba przypadki zawodzą negatywne spojrzenie w przyszłość.(\\.|[^"])*+
pasowałby pełny ciąg. Następny znak musi być podwójnym cudzysłowiem i nie może być końcem wprowadzania. Po podwójnym cudzysłowie znajduje się poza ciągiem, więc nie może być kolejnym dopasowaniem. Więc mija negatywne spojrzenie w przyszłość.źródło
(\\.|[^"])
zadziała?([^\\"]|\\.)
kompletnego rozwiązania.\\.
kończy się niepowodzeniem, gdy nie ma znaku po\
(lub znaku nowej linii, ale można to naprawić za pomocą flagi), a ten przypadek jest objęty negatywnym spojrzeniem wstecz. Kwantyfikator dzierżawczy zapobiega cofaniu się, więc nie mamy innego przypadku do obejrzenia.JavaScript, 24 bajty
"([^"\\]*(?:\\.[^"\\]*)*)"
Grupa 1 to zawartość ciągu.
źródło
"
sJavaScript,
21151312 bajtów"((\\?.)*?)"
Zawartość ciągu znajduje się w grupie 1.
źródło