Я пишу синтаксический анализатор строки, который я использую для анализа всех строк из текстового файла, строки могут находиться в одиночных или двойных кавычках, довольно просто, верно? Ну не совсем. Я написал режиму, чтобы соответствовать струнам, как я хочу. Но это дает мне stackoverflow ошибку на больших строках (я знаю, что Java не на самом деле не очень хороша с материалами REGEX на больших строках), это шаблон Regex (['"]) (?: (?! \ 1 | \\). Stackoverflow ошибка, я прочитал аналогичные вопросы на основе этого, таких как этот, который предлагает использовать stringutils.substringsweed между , но это не удается на строках, таких как '"' '," \\\ ""
, так что мой вопрос должен решить эту проблему? Я могу предоставить больше контекста, если это необходимо, просто прокомментируйте.public static void main(String[] args) {
final String regex = "'([^']*)'|\"(.*)\"";
final String string = "local b = { [\"\\\\\"] = \"\\\\\\\\\", [\"\\\"\"] = \"\\\\\\\"\", [\"\\b\"] = \"\\\\b\", [\"\\f\"] = \"\\\\f\", [\"\\n\"] = \"\\\\n\", [\"\\r\"] = \"\\\\r\", [\"\\t\"] = \"\\\\t\" }\n" +
"local c = { [\"\\\\/\"] = \"/\" }";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i
output: < /p>
Full match: "\\"] = "\\\\", ["\""] = "\\\"", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n", ["\r"] = "\\r", ["\t"] = "\\t"
Group 1: null
Group 2: \\"] = "\\\\", ["\""] = "\\\"", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n", ["\r"] = "\\r", ["\t"] = "\\t
Full match: "\\/"] = "/"
Group 1: null
Group 2: \\/"] = "/
< /code>
Это неправильно обрабатывает сбежавшие кавычки. < /p>
Подробнее здесь: https://stackoverflow.com/questions/583 ... ecial-case