я пытаюсь разметить строки в JavaRegex для tokenizing Строки «Мой Foo имеет„нулевой“номер», сахар, «Мой бар„один номер“,»
"My foo, has "zero" number", sugar ,"My bar has "one or more" numbers"
Выхода должен быть как
"My foo, has "zero" number"
,
sugar
,
"My bar has "one or more" numbers"
Кроме того, я использую группу, названную группой захвата, в соответствии с ними.
String[] p = new String[3];
p[0] = "(?<Special>[\\[\\]/.$*\\-+=><#()%,!|&{}])";
p[1] = "(?<Literals>\"[^\"]*\")";
p[2] = "(?<Identifiers>\\w+)";
for (String s: p) {
sb.append(String.format("|(%s)", s));
} //for ends here
Pattern tp = Pattern.compile(new String(sb.substring(1))); // adding the patterns one after another separated by |
Matcher m = tp.matcher(line);
while (m.find()) { //searches if a token is matched.
if ((m.group("Special") != null)) {
System.out.println(m.group("Special"));
continue;
}
else if((m.group("Literals") != null)) {
System.out.println(m.group("Literals"));
continue;
}
else if((m.group("Identifiers") != null)) {
System.out.println(m.group("Identifiers"));
continue;
}
}
Я могу разметить сахар (используя его для соответствия идентификаторов) с использованием (\ W +) и (с использованием регулярных выражений в специальный). Однако для литералов я не могу соответствовать группе, я думаю, из-за внутренних котировок.
Должны ли избегать ваших внутренних котировок? Каково правило, которое предотвращает «Мой foo, имеет» 'от вашего первого токена? –
Да, это должно было сбежать, но это не так. :( – Ronn