正则表达式与重复规则

时间:2015-07-22 08:28:27

标签: java regex

我想用重复的规则写一个正则表达式。

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

+是可选的分隔符。例如,它也可以像WW200020。我需要在+符号后重复该规则。如何为重复规则编写正则表达式?

请帮帮忙。

1 个答案:

答案 0 :(得分: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%_]*) - 我们在替换模式中引用为{{1}的0个或更多数字(0-9)或%_被捕获到第1组中}。