Заменить строку URL на целочисленные символы, расположенные в конце этой строки - PullRequest
1 голос
/ 12 января 2020

У меня есть некоторая URL-ссылка, и я попытался заменить все нецелые значения целыми числами в конце ссылки, используя regex

URL-адрес похож на

https://some.storage.com/test123456.bucket.com/folder/80.png

Regex, я пытался использовать:

Integer.parseInt(string.replaceAll(".*[^\\d](\\d+)", "$1"))

Выход для этого регулярного выражения "80.png", и мне нужно только "80". Также я попробовал этот инструмент - https://regex101.com. И, как я вижу, основная проблема заключается в том, что «.png» не совпадает с моим регулярным выражением, а затем, после замены, эта часть добавляется в соответствующую группу.

Я совершенно нуб в регулярном выражении, поэтому я прошу вас за помощь.

1 Ответ

1 голос
/ 12 января 2020

Вы можете использовать

String result = string.replaceAll("(?:.*\\D)?(\\d+).*", "$1");

См. Демоверсию regex .

ПРИМЕЧАНИЕ : если совпадений нет, result будет равен значению string. Если вам не нужно это поведение, вместо "(?:.*\\D)?(\\d+).*" используйте "(?:.*\\D)?(\\d+).*|.+".

Подробности

  • (?:.*\D)? - необязательно (необходимо быть необязательным, поскольку шаблон группы 1 может также совпадать в начале строки) последовательность
    • .* - любые 0+ символов, кроме символов разрыва строки, максимально возможное число
    • \D - не-ди git
  • (\d+) - Группа 1: любая одна или несколько цифр
  • .* - любые 0+ других символов чем число символов разрыва строки, как можно больше

Замена - $1, обратная ссылка на значение группы 1, фактически последний фрагмент 1+ di git в строке без строки Разрывы.

Разрывы строки могут поддерживаться, если вы добавляете шаблон с помощью встроенного модификатора DOTALL (?s), то есть "(?s)(?:.*\\D)?(\\d+).*|.+".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...