Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Regexp

Тема в разделе "Разработка плагинов для новичков", создана пользователем CoolBoy, 28 янв 2017.

Статус темы:
Закрыта.
  1. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Доброго времени суток.

    Имею строку следующего содержания:
    Код:
    &6Использований&7: &6100
    
    Нужно достать с помощью regexp из этой строки последнее число - 100.
    Но! На месте слова 'Использований' может быть любое другое слово.
    Сплит также предлагать бесполезно, на месте двоиточия также может быть что угодно. Сама строка может и не содержать пробе(ла / ов). А, да, нельзя никак взаимодействовать со строкой, тоесть заменять слово, убирать колор коды и так далее.

    @[Кто там в регексы умеет(]
     
    Последнее редактирование: 28 янв 2017
  2. Хостинг MineCraft
    <
  3. Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    вообще в душе не ипу что такое регексы и всегда работаю с чарами в таких случаях
    Код:
    String str = "dasdasd: &6100";
    String results = "";
    for (int c =str.length()-1; c>=0; c--) {
        if (str.charAt(c)>='0'&&str.charAt(c)<='9'&&str.charAt(c-1)!='&'&&str.charAt(c-1)!='§') results+=str.charAt(c);
    }
    int result = Integer.parseInt(new StringBuffer(results).reverse().toString());[/java]
     
  4. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Хм, интересно. Позже проверю. Регексом всё равно проще.
     
  5. Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    не умею его (( (а что там по производительности, а то может он быстрее?)
     
  6. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Именно.
     
  7. Mabus

    Mabus Активный участник Пользователь

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    ChatColor.stripColor(string)
    \d+(?!\d+)
     
  8. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Сразу написал в теме что цвета убирать нельзя.
     
  9. Mabus

    Mabus Активный участник Пользователь

    Баллы:
    76
    Skype:
    chervanenko
    Имя в Minecraft:
    Chervanenko
    Так не убирай.
    temp_string=string
    ChatColor.stripColor(temp_string)

    Или до этого тяжело додуматься? :lol::lol::lol::lol:
     
  10. molor

    molor Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    molore
    Не стоит забывать преобразовать & в знаки параграфа, получится что-то вроде
    ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', text))

    Ещё один вариант получения числа: (\d+)$
     
  11. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Мне потом значение в этой строке заменить нужно. И вернуть строку.
    Не нужно костылей предлагать.[DOUBLEPOST=1485602459,1485602205][/DOUBLEPOST]
    Твой регекс захватит число, которое обозначает колор код.
    [​IMG]
     
  12. molor

    molor Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    molore
    Да, я знаю. Но перед этим я написал, что предварительно нужно очистить строку от кодов форматирования.

    Если не очищать, тогда может выйдет так: (&[0-9a-fklmnor])(\d+)$
    Не помню, как там в Java обрабатываются группы в регулярных выражениях, но по идее код цвета будет в группе 1, число будет в группе 2..
     
  13. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Я написал сразу в заголовке темы - КОЛОР КОДЫ УБИРАТЬ НЕЛЬЗЯ. ВТОРУЮ СТРОКУ СОЗДАВАТЬ НЕЛЬЗЯ.
    Работаю только с этой строкой. Нужен только регекс. Костыль мне скинули первым же ответом, если с регексом не выйдет - воспользуюсь им.

    Верно. Твой регекс берёт колор код (теперь целиком) и число. Мне нужно получить только число.
     
  14. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Пробел самый простой вариант тут. Ну а код цвета отсеешь регуляркой, или добавь после него еще пробел.
     
  15. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Строка может не содержать пробела. Нужен универсальный вариант. Ты же шаришь в регулярках? :)
     
  16. molor

    molor Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    molore
    Так получите вторую группу из возвращаемого значения (не знаю, как написать это другими словами) - она и будет содержать только число.
     
  17. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Каким образом я могу это сделать в жабке?
    Я планировал совсем просто:
    string.replaceAll("регекс, который получает число", "то, на что мне нужно это число заменить");
     
  18. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ок, тогда идем сложным путем. Первой регуляркой отрезаешь колор, второй Не цифры.
     
  19. Blc_Dragon

    Blc_Dragon Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    может просто получим вторую группу?[DOUBLEPOST=1485605042,1485604982][/DOUBLEPOST] upload_2017-1-28_17-6-17.png
     
  20. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Вот один из вариантов.

    String s = "&6Использований&7: &6100";
    s.replace(s.replaceAll("(?i)&[0-9A-FK-OR]", "").replaceAll("[^0-9]", ""),
    "500");
     
  21. Автор темы
    CoolBoy

    CoolBoy Активный участник Пользователь

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Можно. Только толку с неё? И что я с ней делать буду? Мне нужно в строке значение заменить.
     
Статус темы:
Закрыта.

Поделиться этой страницей