java正则表达式char序列

时间:2018-02-19 12:23:20

标签: java regex sequence

我有一个包含多个“消息”的字符串。 “message”以某些char序列开头。我试过了:

String str = 'ab message1ab message2ab message3'
Pattern pattern = Pattern.compile('(?<record>ab\\p{ASCII}+(?!ab))');
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    handleMessage(matcher.group('record'))
}

\p{ASCII}+贪吃一切。 符号ab只能在消息内,其序列意味着下一条消息的开头

1 个答案:

答案 0 :(得分:2)

p{ASCII}+是一个或多个ASCII字符的 greedy 正则表达式,这意味着它将使用尽可能长的匹配。但是如果您想要尽可能短的匹配,则可以使用不情愿的量词:p{ASCII}+?。在这种情况下,您应该使用正面前瞻断言。

正则表达式可以成为:

Pattern pattern = Pattern.compile("(?<record>ab\\p{ASCII}+?)(?=(ab)|\\z)");

请注意(ab)|\z以匹配上一条消息...