Не Жадный шаблон регулярных выражений Java

1

Я хочу совместить строку /* Комментарий 183 EOC */

Или /* Комментарий 183 200 EOC */

Мое Regex похоже ниже

 private static final Pattern Comment = Pattern
        .compile("(/\\*(\\s*)Comment(\\s+)(((\\d*),)(\\s*))*((\\d*)(\\s*))(.*?)\\*/)");

Я хочу получить 183 из приведенного выше ввода

Если я попробую matcher.group(4), он ничего не вернет.

(. *?) не действует как не жадный.

Как изменить регулярное выражение, чтобы получить только 183 или 183 200

Теги:

3 ответа

3
Лучший ответ

Вы можете использовать следующее регулярное выражение

\/\*\s+Comment\s+(\d+(,\d+)*)

Демо на regex101

Он только фиксирует нужный вам номер.

  • 0
    Спасибо. Но ввод не должен заканчиваться EOC, он может содержать любой другой символ, а не цифры. Для ex / * Комментарий 123,56,4849, 8494, gfysdft $ #% * / также действителен
  • 0
    @ user3540481 Regex обновлено. Теперь это работает для / * Комментарий 123,1436, 368,3648 * / также
1

Удалите ненужные группы захвата.

"/\\*\\s*Comment\\s+(\\d+(?:,\\d+)*)\\s*(.*?)\\*/"

Получите нужный номер из индекса группы 1.

DEMO

  • 0
    эти числа не должны быть один или два .. Это может быть любое число. Для бывших / * Комментарий 123,1436, 368,3648 * /. Как твое выражение уверяет это?
  • 0
    просто добавьте * вместо ? , Смотрите мое обновление ..
0
/\\*\\s*Comment\\s+([\\d, ]+)

Вы можете использовать этот движущийся прямо вперед захватить group 1.Использование find.Увидь демо.

https://regex101.com/r/tJ2mW5/2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню