Ваша задача - написать RegEx, который соответствует всему в строках.
Строка определяется как все, что окружено (но не включает) двумя неэкранированными "
.
A "
может быть экранирован \
, что также может быть экранировано снова.
Testcases
string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string)
счет
Самое короткое решение побеждает.
Спекуляции
- Пожалуйста, укажите используемый аромат.
- Вход будет сбалансированным
"
. - Там не будет,
\
что непосредственно предшествует начало строки-разделитель. Например, вам не нужно обрабатыватьabc\"def"
code-golf
string
regular-expression
syntax
Дрянная Монахиня
источник
источник
\
перед строкой? Напримерabc\"def"
.abc"de"
, одно есть,d
а другое естьe
?Ответы:
PCRE,
21201519 байтПопробуй это здесь.
Это соответствует символу (или началу ввода) перед началом двойной кавычки, а затем сбрасывает совпадение, чтобы убедиться, что двойная кавычка не передана другому совпадению.
PCRE,
2523 байтаСпасибо Мартину Бюттнеру за то, что он сыграл в гольф 2 байта.
Попробуй это здесь.
объяснение
Обратите внимание, что притяжательный quantifier (
*+
) следит за тем, чтобы отрицательный прогноз всегда начинался после всей строки или целого сегмента, не являющегося строкой.Есть 4 случая:
\\.
никогда не будет соответствовать двойной кавычке в соответствии с разъяснениями. Он может закончиться только перед следующей двойной кавычкой, которая начинает строку или конец ввода. Оба случая терпят неудачу в негативной перспективе.(\\.|[^"])*+
будет соответствовать полной строке. Следующий символ должен быть в двойной кавычке и не может быть концом ввода. После двойной кавычки он находится за пределами строки, поэтому он не может быть другим совпадением. Таким образом, он проходит негативную перспективу.источник
(\\.|[^"])
работать?([^\\"]|\\.)
, а не как полное решение.\\.
сбой только в том случае, если после него нет символа\
(или символа новой строки, но это можно исправить с помощью флага), и этот случай покрывается отрицательным искомым следом. Собственный квантификатор предотвращает возврат, поэтому у нас нет другого случая, чтобы посмотреть.JavaScript, 24 байта
"([^"\\]*(?:\\.[^"\\]*)*)"
Группа 1 - это содержимое строки.
источник
"
sJavaScript,
21151312 байт"((\\?.)*?)"
Содержимое строки в группе 1.
источник