Я делаю минисоставитель в CUP и JFLEX, но не знаю, что регулярное выражение удовлетворяет набор Char.
Спецификация набора, который мне дал преподаватель, - следующая:
Позволяется определение постоянных величин и переменные типа char. Для постоянных величин используется тот же синтаксис, что и в Java, используя простые кавычки, (например
'a'
) и когда могут использовать последовательности утечки равно как в Java для специальных символов('\b','\n','\f','\r','\t','\"','\\','\'')
, также как и последовательности в Unicode (например'\u1234'
).
А именно, что набор элементов, который должен брать мне регулярное выражение, '\n', '&', 'a', 'u0043'
, и т.д.
Я использовал это регулярное выражение, но оно я не функционировало:
("'"."'") | "'"(‘\b’,’\n’,’\f’,’\r’,’\t’,’\”’,’\\’,’\’’)"'" | ("'"'\u'[0-9]+"'")
Кто-то может предлагать мне другое регулярное выражение?
Спасибо заранее.
Ты можешь тестировать следующую expresiГіn регулярная:
'(\\(["'\\bfnrt]|u[0-9A-Fa-f]{4})|[^\\'])'
Визуально:
В Java рекомендует себе определять постоянную величину Pattern
, чтобы улучшать эффективность: Вышедшие
private static final Pattern REGEX_PATTERN =
Pattern.compile("\'(\\\\([\"\'\\\\bfnrt]|u[0-9A-Fa-f]{4})|[^\\\\\'])\'");
public static void main(String[] args) {
String input = "\'\\n\', \'&\', \'a\', \'\\u0043\', \'\"\'";
Matcher matcher = REGEX_PATTERN.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
:
'\n'
'&'
'a'
'\u0043'
'"'