#regex
#регулярное выражение
Вопрос:
Вот мой вводимый текст:
String input = "Current year is: 2014";
Я просто хочу найти первое буквенное слово (без цифр), используя классы символов POSIX. Следующее регулярное выражение работает и находит «Текущий»
String pattern = "\p{Alpha}*"; //Current
Но мне не разрешено использовать оператор *. Поэтому мой вопрос: как я могу получить тот же результат без использования *?
Комментарии:
1. Но мне не разрешено использовать оператор * Почему?
2. Я делаю несколько слайдов курса, а операторы , *, ? и т. Д. Появятся Позже, После этого примера
3. А потом показать его позже? Правильный способ сделать это — использовать
*
квантификатор… Альтернативой было бы использование{0,}
в качестве квантора, но если это курс, я бы рекомендовал пройти все кванторы одновременно.4. Я думаю, вам следует выбрать пример, который не требует извлечения определенных классов, пока вы не введете операторы итерации.
5. Я настоятельно рекомендую ввести замыкание Kleene перед классами символов. Замыкание Kleene является фундаментальной частью regexp.
Оператор можно эмулировать с помощью замыкания Kleene (
a
=aa*
), чтобы его можно было ввести позже. Ядром регулярного выражения является символьный литерал, функцияany
match (.
), функция Cleene closure (*
) и функция alternation (|
). Все остальное — просто расширения для удобства.
Ответ №1:
Используйте :
String pattern = "\p{Alpha} ";
Это почти то же самое, только «нулевые» вхождения не допускаются.
Комментарии:
1. OP, указанный в комментарии
, тоже не разрешен.
Ответ №2:
Вы можете использовать {n,}
квантификатор, например:
String pattern = "\p{L}{0,}";
Комментарии:
1. Я не знал, что вы можете опустить максимум! Спасибо за главный совет.
Ответ №3:
Если вы не можете использовать *, что означает 0 или больше, что делать {0,}
?