Регулярное выражение для строкового литерала в гибком проводе/законе

Я экспериментирую для изучения гибкого провода и хотел бы к литералам строки совпадения. Мой код в настоящее время похож:

"\""([^\n\"\\]*(\\[.\n])*)*"\""        {/*matches string-literal*/;}

Я боролся с изменениями в течение приблизительно одного часа и не могу получить его работающий способ, которым это должно. Я по существу надеюсь соответствовать строковому литералу, который не может содержать новую строку (если этого не оставляют), и поддерживает оставленные символы.

Я, вероятно, просто пишу плохое регулярное выражение или одно несовместимое с гибким проводом. Советуйте!

49
задан lesmana 6 May 2013 в 00:43
поделиться

2 ответа

Строка состоит из метки цитаты

"

, а затем ноль или более Выбежал на что-нибудь

\\.

или символ нецитата

[^"\\]

, и, наконец, расточая цитата

"

поставить его все вместе, и у вас есть

\"(\\.|[^"\\])*\"

.

111
ответ дан 7 November 2019 в 11:23
поделиться

Как насчет использования начального состояния ...

int enter_dblquotes = 0;

%x DBLQUOTES
%%

\"  { BEGIN(DBLQUOTES); enter_dblquotes++; }

<DBLQUOTES>*\" 
{ 
   if (enter_dblquotes){
       handle_this_dblquotes(yytext); 
       BEGIN(INITIAL); /* revert back to normal */
       enter_dblquotes--; 
   } 
}
         ...more rules follow...

Это было похоже на этот эффект (Flex использует % s или % x , чтобы указать, что должно быть ожидается, когда Вход FLEX обнаруживает цитату, он переключается в другое состояние, затем продолжает LEXING до тех пор, пока не достигнет другого цитата, в котором он возвращается в нормальное состояние.

8
ответ дан 7 November 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: