РЕДАКТИРОВАТЬ: я нашел обходной путь к этому, но я все еще хотел бы сохранить этот вопрос из любопытства.
Я использую регулярное выражение в проекте Scala для анализа DSL, и я хотел бы знать, будет ли определенное регулярное выражение продолжать соответствовать тексту или если оно соответствует только ограниченному объему текста, то есть что-то вроде "\\."
(допустимая Java строка, не допустимое регулярное выражение), который просто соответствует периоду как в отличие от чего-то вроде "[A-Za-z_$][A-Za-z0-9_$]*"
, которое (мы надеемся) соответствует действительному идентификатору Java и может соответствовать одному символу, но может также работать, если использовать другой символ alphanumeri c.
Я знаю, что вы можете сделать это ( по крайней мере, с помощью Java API), когда соответствующая строка известна как Matcher#requireEnd()
, но есть ли способ сделать это только с Pattern
(Java) или Regex
(Scala) что вы построили, до вы знаете, что вы соответствуете?
Это так, чтобы я мог иметь это поле в моем классе, представляющее шаблон регулярного выражения: val isFixed: Boolean = ...//does the regex repeat?
. Затем при разборе я могу решить, следует ли немедленно вернуть токен или добавить другой символ и попробовать другое совпадение.
Кстати, я в порядке с некрасивыми, частично работающими решениями. Спасибо.