Регулярное выражение без оператора *

#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,} ?