2015-07-22 8 views
0

Я хочу написать регулярное выражение с повторяющимися правилами.Регулярное регулярное выражение

String resList = "WW200020+ww200020"; 
if(resList!=null && (resList.matches("^([a-zA-Z]{2}[0-9%_]*)"))){ 
    resList =resList.substring(2); 
} 

+ является ограничителем, который может быть необязательным. Например, он также может быть как WW200020. Мне нужно повторить правило после символа +. Как я могу написать регулярное выражение для повторных правил?

Прошу помочь.

+0

Разделите строку на +, а затем на результат. В противном случае объясните, что вы хотите делать с регулярным выражением. – RealSkeptic

+1

Каков ваш ожидаемый результат? –

ответ

1

Вы можете получить ожидаемый результат с 1 replaceAll и обновленный регулярное выражение (обратите внимание на [+] в квадратных скобках, так что мы не должны бежать, и ? квантор, что делает его по желанию, а также обратите внимание на окончательный + квантор что ищет весь подмаски 1 или более раз):

String resList = "WW200020+ww200020"; 
if(resList!=null && resList.matches("^([+]?[a-zA-Z]{2}[0-9%_]*)+")) { 
    resList = resList.replaceAll("(?i)(?<=^|[+])[a-z]{2}([0-9%_]*)", "$1"); 
    System.out.println(resList); 
} 

См IDEONE demo

регулярное выражение - (?i)(?<=^|[+])[a-z]{2}([0-9%_]*) - спичек следующее:

  • (?i) - Обеспечение регистронезависимого соответствия ([a-z] будет соответствовать [A-Z], тоже)
  • (?<=^|[+]) - Взгляд-за убедившись, что есть запуск из-строки (^) или символа плюс перед ...
  • [a-z]{2} - 2 английские буквы
  • ([0-9%_]*) - 0 или более цифр (0-9) или % или _, захваченные в 1-й группе, что мы ссылаемся в шаблоне замены как $1.
+0

спасибо! он работает –

+0

Я использовал запись как resList.substring (2); путь. Можете ли вы объяснить мне, как вы заменяете первые два символа, используя выражение reg? –

+0

OI добавили пояснения. Эта замена выполняется «глобально», неоднократно и эффективно удаляет 2 буквы либо в начале строки, либо после любого символа '+'. –

Смежные вопросы