Грамматика для построения строкового литерала будет выглядеть примерно так:
string-literal ::= quote text quote
text ::= character text
| character
character ::= non-quote
| backslash quote
с терминалами без кавычек, обратной косой черты и кавычек.
Грамматика является регулярной, если она не зависит от контекста (т. Е. Левая часть всех правил всегда является одним нетерминалом), а правая часть всех правил всегда либо пустая, либо терминал, либо терминал, за которым следует нетерминал.
Вы можете заметить, что первое приведенное выше правило имеет терминал, за которым следует нетерминал, за которым следует терминал. Таким образом, это не обычная грамматика.
Регулярное выражение - это выражение, которое может анализировать обычные языки (языки, которые могут быть построены с помощью обычной грамматики). Невозможно проанализировать нерегулярные языки с помощью регулярных выражений.
Сложность поиска подходящего регулярного выражения связана с тем, что подходящего регулярного выражения не существует. Таким образом, вы никогда не получите код, который является правильным.
Гораздо проще написать простой синтаксический анализатор в соответствии с приведенными выше правилами. Поскольку текст , содержащийся в ваших строковых литералах , является регулярным, вы можете использовать простое регулярное выражение для поиска ключевого слова --- после после извлечения этого текста из его окрестности.