正则表达式 - 使用分隔符分隔字符串

时间:2018-01-08 13:10:24

标签: java regex

我正在尝试获取以逗号(,)分隔的字符串,并且需要验证字符串

string:event1,event23,event343

规则:每个值都应该有事件,第一个值应该是event1,剩下的值可以有'event [1-9]'

我尝试(^event1)(,event[1-9]+)*正则表达式,但是当字符串包含三个以逗号分隔的值时,它不支持

更新

Pattern pattern = Pattern.compile("(^event1)(,event[1-9]+)*",Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher("event1,event112,event39"); 
  

为:event1,event2

工作      

不工作:event1,event2,event3

更新2

https://www.freeformatter.com/java-regex-tester.html

尝试了我的正则表达式
Results
.matches() method: false
.lookingAt() method: true

3 个答案:

答案 0 :(得分:0)

在这种情况下,我将文本分成头部和尾部,并重复:

    Pattern re = Pattern.compile("(event[0-9]+)(?:,(.*))?", 0);
    Matcher m = re.matcher(text);
    while (m.matches()) {
        String head = m.group(1);
        String tail = m.group(2);
        System.out.println(head);
        if (tail == null) {
            break;
        }
        m = re.matcher(tail);
    }

答案 1 :(得分:0)

您可以翻译您的规则

  

规则:每个值都应该有事件,第一个值应该是event1,剩下的值可以有事件[1-9]'

到方法并使用字符串方法startsWithsplitmatches,我发现它们更具可读性:

public static void main(String[] args) {
    String str = "event1,event2,event23";
    System.out.println(validate(str));
}
public static boolean validate (String str){
    return str.startsWith("event1") && Stream.of(str.split(",")).allMatch(e->e.matches("event\\d+"));
}

答案 2 :(得分:0)

简单的方法是使用这个正则表达式:

^event1(,event[1-9])*$