我正在尝试获取以逗号(,)分隔的字符串,并且需要验证字符串
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
答案 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]'
到方法并使用字符串方法startsWith
,split
和matches
,我发现它们更具可读性:
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])*$