使用正则表达式在Java中查找重复模式

时间:2014-03-09 01:02:42

标签: java regex

我正在进行常规表达以匹配以下字符串。

String sample1 = "key:value|key:value|key:value|key:value";

正如您可以看到键:值是定期重复的,唯一的分隔符是 管道(|)。

注意事项:

key =>只是字母 value =>字母,+ - 唱歌和数字(暂时)

在订单中,我有以下正则表达式:

    public void testOptionsRules()
{
    String match = "[a-z]+[:][-+]?[a-z_0-9]+";

    boolean option1 = "a:f".matches(match);
    boolean option2 = "ad:d".matches(match);
    boolean option3 = "addc:dd1".matches(match);
    boolean option4 = "min:50".matches(match);
    boolean option5 = "ssss:-10".matches(match);
    boolean option6 = "dropl2etx:5555".matches(match);

    assertTrue(option1 && option2 && option3 && option4 && option5);
    assertFalse(option6);
}

最后一次测试很有效。但是我如何匹配周期性重复。我的意思是 键:值|键:值|键:值|键:值

由于

1 个答案:

答案 0 :(得分:3)

您可以使用匹配器循环播放字符串中的每个匹配项:

      import  java.util.regex.Pattern;
      import  java.util.regex.Matcher;
 /**
    <P>{@code java RegexForRepeatingString}</P>
  **/
 public class RegexForRepeatingString  {
    public static final void main(String[] ignored)  {

       String sRegex = "\\b[a-z]+:[+-]?[a-z_0-9]+\\b";

       String sToSearch = "keya:valuea|keyb:valueb|keyc:valuec|keyd:valued";

       Matcher m = Pattern.compile(sRegex).matcher(sToSearch);

       while(m.find())  {
          System.out.println(m.group());
       }
    }
 }

输出:

[C:\java_code\]java RegexForRepeatingString
 keya:valuea
 keyb:valueb
 keyc:valuec
 keyd:valued